Laravel:将模型传递给视图是不好的做法?

HPa*_*age 1 php model-view-controller laravel

在我到目前为止看到的示例中,具体值总是传递给视图 - 无论是作为单独的变量还是作为数组.

Laravel文档中的示例:

$view = View::make('greeting')->with('name', 'Steve');
Run Code Online (Sandbox Code Playgroud)

将模型传递给视图是不是一个坏主意?

在我的控制器中我使用:

return response->view('quote.render', Quote::find($id))
Run Code Online (Sandbox Code Playgroud)

而不是像:

return response->view('quote.render', 
  ['date' => $quote->date,'clientName' => $quote->client->name, 'items'=> $quote->items])
Run Code Online (Sandbox Code Playgroud)

在我看来(刀片模板),我可以使用这样的模型:

To: {{$quote->client->name}
Date: {{$quote->date}}
Run Code Online (Sandbox Code Playgroud)

对我来说最大的好处就是我可以随时获得所有模型的数据 - 如果模型发生变化(获得更多属性),我不必更改控制器以传递新数据......它也感觉更清洁.

这种方法有什么缺陷吗?还是任何原因都是不好的做法?感觉是对的 - 但我没有在例子中看到它.

edc*_*dcs 6

将模型传递到视图中是很好的,这样做的好方法是这样的:

public function show($id)
{
    $thing = Thing::findOrFail($id);

    return view('showAThing')->with('thing', $thing);
}
Run Code Online (Sandbox Code Playgroud)

findOrFail()如果数据库中不存在该项,则在此上下文中使用将引发404错误.这很有用,因为如果您尝试使用$thing= 渲染视图,null那么您将遇到未处理的异常.

编辑

编辑以更新此项,findOrFail不会自动抛出404错误.它会抛出一个ModelNotFound异常,但你可以设置你的错误处理程序来捕获它并做你觉得最合适的事情(在我的情况下我会返回404响应).