Laravel 为资源控制器命名路由

2022-08-30 08:24:40

使用 Laravel 4.2,是否可以为资源控制器路由分配名称?我的路由定义如下:

Route::resource('faq', 'ProductFaqController');

我尝试向路由添加一个名称选项,如下所示:

Route::resource('faq', 'ProductFaqController', array("as"=>"faq"));

但是,当我点击/faq路线并放在我眼中时,它会产生而不仅仅是.{{ Route::currentRouteName() }}faq.faq.indexfaq


答案 1

使用资源控制器路由时,它会自动为其创建的每个路由生成名称。 基本上是一个帮助器方法,然后为您生成单独的路由,而不是您需要手动定义每个路由。Route::resource()

您可以在终端/控制台中键入 Laravel 4 或 Laravel 5 来查看生成的路由名称。您还可以查看资源控制器文档页面上生成的路由名称的类型(Laravel 4.x |Laravel 5.x)。php artisan routesphp artisan route:list

有两种方法可以修改资源控制器生成的路由名称:

  1. 提供一个数组作为第三个参数数组的一部分,每个键都是资源控制器方法(索引、存储、编辑等),值是要为路由指定的名称。names$options

    Route::resource('faq', 'ProductFaqController', [
        'names' => [
            'index' => 'faq',
            'store' => 'faq.new',
            // etc...
        ]
    ]);
    
  2. 指定为每个路由名称定义前缀的选项。as

    Route::resource('faq', 'ProductFaqController', [
        'as' => 'prefix'
    ]);
    

    这将为您提供诸如 、等路由。prefix.faq.indexprefix.faq.store


答案 2

对于使用Laravel 5.5 +的答案寻求者,找到此页面:

Route::namespace('Admin')->prefix('admin')->name('admin.')->group(function () {

    Route::resource('users','UserController');

});

这些选项将为资源生成以下内容:

  • namespace()将控制器命名空间设置为 \Admin\UserController

  • prefix()将请求 URi 设置为 /admin/users

  • name()将路由名称访问器设置为route('admin.users.index')

在DOT中,它不是拼写错误。name()

请让其他人知道这是否适用于Laravel 5.5之前的任何版本的评论,我将更新我的答案。

更新:

泰勒接受了我的PR,在5.5中正式记录了这一点:

https://laravel.com/docs/5.5/routing#route-group-name-prefixes


更新拉拉维尔 8

Laravel 8 中的新增功能,不推荐使用 in 路由配置,已从 Laravel 的标准配置中删除默认包装器。此更改将 Controller 命名空间与在对路由进行分组时必须考虑的命名空间分离,在注册路由时放弃要求可在组织控制器和路由时提供更大的自由度。namespacenamespaceRouteServiceProvidernamespace

使用Laravel 8,本文上半部分的原始示例现在将如下所示,使用对静态类名的自我引用:


use \App\Http\Controllers\Admin\{
    UserController,
    ProductController,
    AnotherController,
}

Route::prefix('admin')->name('admin.')->group(function () {

    Route::resource('users', UserController::class);

    Route::resource('products', ProductController::class);

    Route::resource('another', AnotherController::class);

});


推荐