Laravel使用命名路线

enc*_*nce 7 php laravel

关于命名路由的使用,这2行允许我访问同一页面,这是正确的吗?

// Named route
Route::get('test/apples', array('as'=>'apples', 'uses'=>'TestController@getApples'));

// Much simpler
Route::get('apples', 'TestController@getApples');
Run Code Online (Sandbox Code Playgroud)

如果后者更短并且更不容易出错,我是否应该使用命名路由?

Sam*_*Sam 5

唯一的优点是链接起来更容易,并且您可以更改URL而无需浏览和更改其所有引用。例如,使用命名路由,您可以执行以下操作:

URL::route('apples');
Redirect::route('apples');
Form::open(array('route' => 'apples'));
Run Code Online (Sandbox Code Playgroud)

然后,如果您更新路线,则所有URL都会更新:

// from
Route::get('test/apples', array('as'=>'apples', 'uses'=>'TestController@getApples'));

// to
Route::get('new/apples', array('as'=>'apples', 'uses'=>'TestController@getApples'));
Run Code Online (Sandbox Code Playgroud)

另一个好处是从逻辑上创建具有很多参数的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
Run Code Online (Sandbox Code Playgroud)


The*_*pha 5

命名路线更好,为什么?

最好使用a,named route因为使用insstsead url可能会使用name来引用路线,例如:

return Redirect::to('an/url');
Run Code Online (Sandbox Code Playgroud)

现在,上面的代码将起作用,但是如果您使用此代码:

return Redirect::route('routename');
Run Code Online (Sandbox Code Playgroud)

然后它将动态生成,url因此,即使您进行更改,url代码也不会被破坏。例如,检查您的route

Route::get('apples', 'TestController@getApples');
Route::get('apples', array('as' => 'apples.show', 'uses' => 'TestController@getApples'));
Run Code Online (Sandbox Code Playgroud)

两条路由是相同的,但是没有name一条路由,要使用没有名称的路由,您必须依赖url,例如:

return Redirect::to('apples');
Run Code Online (Sandbox Code Playgroud)

但是,如果路由包含名称,则可以使用路由名称进行相同的操作,例如:

return Redirect::route('apples.show');
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您可以将urlfrom 更改为applessomethingelse但是仍然Redirect可以在不更改代码的情况下工作。