Laravel-请解释命名控制器路由';使用'';如';


Laravel - please explain Naming Controller Routes 'uses', 'as'

我相信这很简单,但我不理解。请从文件中对此进行解释:

命名控制器管线与闭合管线类似,您可以在控制器路线:

Route::get('foo', ['uses' => 'FooController@method', 'as' => 'name']);

我不清楚"uses"、"as"answers"name"的用途以及如何使用它们。


更新:

因此,我将路由闭包命名为'bar',但当尝试在URL 中调用/bar/qux时,我得到了NotFoundHttpException

Route::get('foo', ['as' => 'bar', function() {
    dd('foo');
}]);
Route::get('qux', function() {
    action('bar');
});

uses指定路由命中时要调用的类以及该类上的方法。因此,对于Laravel 5.1,在您的示例中,默认情况下是类app/Http/Controllers/FooController.php 上的方法method()

as意味着您为路由指定一个名称,以便以后更容易链接到它。假设你有十个视图,并且你从所有视图链接到同一条路线。如果您更改链接的格式,则必须单独跟踪每个链接并更改它们。但是,如果你给你的路线起了名字,你就不必更改任何东西,因为他们只会根据这个名字查找路线。

把它放在一起,假设你有一个网店,你想要一个客户页面的路线,你想从你的视图链接到它。它可能看起来像这样:

Route::get('customers', [
    'uses' => 'ShopController@customers',
    'as' => 'customers'
]);

uses属性定义路由将调用的控制器和方法,其中第一部分FooController是控制器的名称,在@之后是FooController中方法的名称。该方法及其控制器必须存在。

as属性指定路由的名称,允许您方便地通过其名称(例如Redirect::route('routeName');)调用路由,并类似地通过URL::route('routeName')获取路由地址,这在视图中很方便(注意:这是Laravel 4.2语法)

在您的编辑中,您遇到了一个问题,因为您正试图使用路由名称作为路由的地址。地址是路由中的第一个属性,在您的示例中是foo。如果你想通过地址栏访问路线,你需要使用路线完整地址(也要考虑组前缀)。