关于命名路由的使用,这2行允许我访问同一页面,这是正确的吗?
// Named route
Route::get('test/apples', array('as'=>'apples', 'uses'=>'TestController@getApples'));
// Much simpler
Route::get('apples', 'TestController@getApples');
如果后者更短且更不容易出错,我是否应该使用命名路由?
答案 0 :(得分:5)
使用named route
总是更好,因为如果使用url
,您可以使用name
来引用路线,例如:
return Redirect::to('an/url');
现在上面的代码可以使用,但是如果你使用它:
return Redirect::route('routename');
然后它会立即生成url
,如果您更改了url
,您的代码就会被破坏。例如,检查您的route
:
Route::get('apples', 'TestController@getApples');
Route::get('apples', array('as' => 'apples.show', 'uses' => 'TestController@getApples'));
两条路线都相同,但没有name
,因此要使用没有名称的路线,您必须依赖url
,例如:
return Redirect::to('apples');
但如果您的路线包含名称,您可以使用路线名称进行相同的操作,例如:
return Redirect::route('apples.show');
在这种情况下,您可以将url
从apples
更改为somethingelse
,但仍然可以在不更改代码的情况下使用Redirect
。
答案 1 :(得分:4)
唯一的好处是它更容易链接,您可以更改URL而无需通过并更改其所有引用。例如,使用命名路由,您可以执行以下操作:
URL::route('apples');
Redirect::route('apples');
Form::open(array('route' => 'apples'));
然后,如果您更新路线,您的所有网址都会更新:
// from
Route::get('test/apples', array('as'=>'apples', 'uses'=>'TestController@getApples'));
// to
Route::get('new/apples', array('as'=>'apples', 'uses'=>'TestController@getApples'));
另一个好处是逻辑上创建一个包含很多参数的URL。这使您可以通过URL生成更加动态,例如:
Route::get('search/{category}/{query}', array(
'as' => 'search',
'uses' => 'SearchController@find',
));
$parameters = array(
'category' => 'articles',
'query' => 'apples',
);
echo URL::route('search', $parameters);
// http://domain.com/search/articles/apples
答案 2 :(得分:0)
命名路线的唯一原因是您以后需要引用它。 IE:从视图中的页面中查看您是否在该路径中。