将模型属性分别传递到视图

时间:2019-02-20 06:20:37

标签: php laravel

将模型传递到相应的视图时遇到麻烦。我试图只有一种视图来创建和编辑我的模型。我也在使用验证。

我似乎无法找出一种优雅的方式将所有模型属性作为单独的变量传递到我的视图。

这是我的观点:

<div class="col-md-6 mb-3">
    <label for="title">Title</label>
    <input type="text" class="form-control" id="title" name="title" value="{{ old('title') }}">
</div>

我需要传递一个名为title的变量。但是,如果我自己指定每个属性,那将变得荒谬。

$product = Product::find($id);

return view('admin.products.new',
    ['id' => $id, 'title' => $product['title']]
); // this is stupid

我可以将模型作为一个整体传递给视图,但是随后我将不得不更改视图以检查是否设置了变量,然后从中获取嵌套的子值。这会破坏验证。

$product = Product::find($id);

return view('admin.products.new',
    ['product' => $product]
); // this is stupid

并在视图中:

<div class="col-md-6 mb-3">
    <label for="title">Title</label>
    <input type="text" class="form-control" id="title" name="title" value="{{ $product['title'] ?? '' }}">
</div>

我该怎么办?

2 个答案:

答案 0 :(得分:1)

这是我认为您正在寻找的东西

/** @var Product $product */
$product = Product::find($id);

foreach($product->getAttributes() as $attribute=>$value)
   View::share($attribute,$value??"");

return view('admin.products.new');

答案 1 :(得分:0)

您可以创建一个名为ProductTrait的特征。
还指定您要检索的列。在此示例中,我使用ID和职位。

public function getProducts()
{
    $array = Product::all()->pluck('job_title', 'id')->toArray();
    return $array;
}

然后在您的控制器中:

$product_info = $this->getProducts();
return view('admin.products.new')->with('product_info',$product_info);

注意:不要忘记在标题中包括“ 使用App \ Traits \ ProductTrait;
在控制器内“ 使用ProductTrait;

输出:
Image Here