【发布时间】:2013-10-21 22:32:52
【问题描述】:
我对 laravel 还是很陌生,从我在 laravel MVC 应用程序中看到的情况来看,大多数教程都使用控制器通过 View::make('[PATH]') 返回视图,所以典型的场景是这样的:
app/routes.php
Route::get('search', array(
'uses' => 'SearchController@newSearch',
'as' => 'search.index'
));
Route::get('search_result', array(
'uses' => 'SearchController@runSearch',
'
));
app/controllers/SearchControllers.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 中,我们最终不会不得不跟踪所有控制器更新视图的路径?
相反,如果我将 route.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'));
}));
这仍然有效,尽管需要额外的路由来创建视图,但我们只需要跟踪和更新 route.php 如果我们需要重组或更改名称意见。
那么使用控制器以这种方式编写路由会有任何问题吗?还是有其他更好的方法可以将视图路径从控制器中抽象出来?
【问题讨论】: