我对 laravel 很陌生,从我在 laravel MVC 应用程序中看到的内容来看,大多数教程都使用控制器通过 View::make('[PATH]')
返回视图,因此典型场景如下所示:应用/路由.php
Route::get('search', array(
'uses' => 'SearchController@newSearch',
'as' => 'search.index'
));
Route::get('search_result', array(
'uses' => 'SearchController@runSearch',
'
));
应用程序/控制器/搜索控制器.php
public function newSearch()
{
return View::make('search');
}
public function runSearch()
{
//validate and query search
return View::make('search')
->with('result',$result);
}
这一切都很好,除了如果以后我们决定重组视图并将search.php
与其他相关视图一起放在web/search.php
中,我们最终是否必须跟踪所有控制器来更新视图的路径?
相反,如果我将路线.php作为"视图工厂",是否有任何缺点,如下所示:
Route::get('search', array('as' => 'search.index', function()
{
return View::make('search');
}));
Route::get('search_query', array(
'uses' => 'SearchController@runSearch'
));
Route::get('search_result', array('as' => 'search.result', function()
{
return View::make('search')
->with('result',Session::get('result'));
}));
这仍然有效,尽管需要额外的路由来制作视图,但是如果我们需要重组或更改视图的名称.php我们只需要跟踪和更新路由。
那么用控制器以这种方式编写路由会有任何问题吗? 或者有没有其他更好的方法可以将视图路径从控制器中抽象出来?
显然routes.php
应该只包含有关路由的信息。它不应该包含任何业务登录,这是针对控制器的。因此,就您目前的路由而言,我会说这很好,但是如果您需要向search_result
路由添加一些业务逻辑,则需要将其移动到控制器并修改路由。我认为它在控制器中呈现比在routes.php
中更好.
根据您打算实现的功能,您还可以使用足智多谋的控制器和路由。
您始终可以在类中创建一个属性来存储视图的名称,并在要创建视图时调用该属性。