【问题标题】:Laravel - please explain Naming Controller Routes 'uses', 'as'Laravel - 请解释命名控制器路由'uses','as'
【发布时间】:2015-12-06 21:38:44
【问题描述】:

我确定这很简单,但我不明白。请解释一下,来自documentation

命名控制器路由和闭包路由一样,你可以在 控制器路由:

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

我不清楚“uses”、“as”和“name”的用途,以及如何使用它们。


更新:

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

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

Route::get('qux', function() {
    action('bar');
});

【问题讨论】:

    标签: php laravel laravel-5.1


    【解决方案1】:

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

    as 表示你给路由命名,以便以后更容易链接到它。假设您有十个视图,并且您从所有视图链接到同一条路线。如果您更改链接的格式,则必须单独跟踪每个链接并同时更改它们。但是,如果您为路线命名,则无需更改任何内容,因为他们只会按该名称查找路线。

    总而言之,假设您有一个网上商店,并且您想要一条用于您的客户页面的路线,并且您希望从您的视图中链接到它。它可能看起来像这样:

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

    【讨论】:

    • 试一试,但没有成功——可能是出错或完全错过了重点。请查看更新后的问题
    • 您更新后的问题是您的路由地址是/foo,它的内部名称为bar,但您正试图通过/bar 访问它。那是行不通的。名称和链接是两个不同的东西。我可以建议遵循教程吗?您在正确的轨道上,但这些都是一些基本问题,您可能需要从头开始查看它们。
    • 我想我修复了它,将action('bar') 更改为redirect(route('bar'))
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-20
      • 1970-01-01
      • 1970-01-01
      • 2015-07-05
      • 2014-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多