【问题标题】:Populate a form with a model object after redirecting in Laravel在 Laravel 中重定向后使用模型对象填充表单
【发布时间】:2020-01-31 11:48:38
【问题描述】:

我有一个运行良好的模型的基本 CRUD 结构。现在我想重定向到 create 方法并使用预先存在的模型填充表单。它可以通过用户选择一个 id 来工作,然后我会选择该模型并重定向到创建页面并填充表单。

这是我迄今为止尝试过的

$order = Orders::find($id);

$inventory = Inventory::where(['id' => $order->inventory_id])->first()->toArray();

return redirect()->route('backend.inventory.create', $inventory['bag_id'])->withInput($inventory);

在上面的示例中,它找到订单并选择与其相关的单个库存项目(我已经确认它肯定是按预期选择库存项目)并重定向到库存创建页面。但是,当使用 ->withInput() 方法时,这似乎并没有像我预期的那样用数据填充我的表单。

如何使用重定向将数据传递到表单?


按照以下要求添加表单代码。这只是表单的一列,因为它是一个巨大的代码块

<div class="form-group row" id="item-name" v-if="type != '3'">
    <label for="name" class="col-md-2 col-form-label text-md-right">Item Name</label>
    <div class="col-md-6">
        <input id="name" type="text" class="form-control" name="name" value="{{ old('name') }}" required>

        @if ($errors->has('name'))
            <span class="invalid-feedback" role="alert">
                <strong>{{ $errors->first('name') }}</strong>
            </span>
        @endif
    </div>
</div>

【问题讨论】:

  • 您的backend.inventory.create 文件是什么样的?
  • 您可以简单地使用紧凑方法并更改 return redirect()->route('backend.inventory.create', $inventory['bag_id'])->withInput($inventory);返回 redirect()->route('backend.inventory.create', $inventory['bag_id'])->with(compact('inventory'));
  • @zlatan 我已经为部分视图添加了代码,表单很大,所以我只包含了其中的一部分
  • withInput() 用于重定向,而不是在返回视图页面期间。
  • @Oops 这不是我的代码在做什么吗?它在做重定向?还是我误会了?

标签: php laravel


【解决方案1】:

你可以用这个:

return Redirect::back()->withInput(Input::all());

如果你正在使用表单请求验证,这正是 Laravel 将错误和给定输入重定向回来的方式。

摘自\Illuminate\Foundation\Validation\ValidatesRequests

return redirect()->to($this->getRedirectUrl())
                    ->withInput($request->input())
                    ->withErrors($errors, $this->errorBag());

【讨论】:

  • 我没有输入,我使用数据库中预先存在的模型进行重定向,而不是使用表单输入进行重定向。
【解决方案2】:

试试这个

<div class="form-group row" id="item-name" v-if="type != '3'">
    <label for="name" class="col-md-2 col-form-label text-md-right">Item Name</label>

    <div class="col-md-6">
        <input id="name" type="text" class="form-control" name="name" value="{{ old('name') ?? $inventory['name'] }}" required>

        @if ($errors->has('name'))
            <span class="invalid-feedback" role="alert">
            <strong>{{ $errors->first('name') }}</strong>
        </span>
        @endif
    </div>
</div>

{{ old('name') ?? ($inventory['name'] ?? '') }} 如果存在旧数据,它将显示旧数据,否则来自 withInput 的$inventory-&gt;name 也是可选的,这就是我放的原因?

参考链接https://laravel.com/docs/6.x/requests#old-input

【讨论】:

    【解决方案3】:

    您可以使用 compact() 函数创建包含变量及其值的数组。

    $order = Orders::find($id);
    $inventory = Inventory::where(['id' => $order->inventory_id])->first()->toArray();
    return view('backend.inventory.create', compact('inventory'));
    

    在您的视图页面中,您可以像这样使用它,

    <input id="name" type="text" class="form-control" name="name" value="{{ $inventory['name'] }}" required>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-15
      • 2021-11-14
      • 2016-02-23
      • 2011-12-27
      • 1970-01-01
      • 2018-04-11
      • 1970-01-01
      • 2018-08-26
      相关资源
      最近更新 更多