Laravel为资源控制器命名了路线

fly*_*123 47 php laravel laravel-4

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

Route::resource('faq', 'ProductFaqController');
Run Code Online (Sandbox Code Playgroud)

我尝试在路由中添加名称选项,如下所示:

Route::resource('faq', 'ProductFaqController', array("as"=>"faq"));
Run Code Online (Sandbox Code Playgroud)

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

Ake*_*rts 144

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

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

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

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

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

    Route::resource('faq', 'ProductFaqController', [
        'as' => 'prefix'
    ]);
    
    Run Code Online (Sandbox Code Playgroud)

    这会给你的路线,例如prefix.faq.index,prefix.faq.store等等.


Ham*_*eza 20

我不知道它在 laravel 4.2 中是否可用(我在 5.7 中测试过)但您可以使用它names来更改资源生成的所有路由的名称

Route::resource('faq', 'ProductFaqController', ['names' => 'something']);
Run Code Online (Sandbox Code Playgroud)

结果会是这样

something.index
Run Code Online (Sandbox Code Playgroud)

并且您不需要指定每条路线

  • 这真是一个被低估的答案。 (3认同)

Mar*_*ton 18

对于使用Laravel 5.5+的求职者找到此页面:

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

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

});
Run Code Online (Sandbox Code Playgroud)

这些选项将导致资源的以下内容:

  • namespace() 将Controller名称空间设置为\ Admin\UserController

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

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

name()DOT意图中,它不是拼写错误.

如果对Laravel 5.5之前的任何版本的评论都有效,请让其他人知道,我会更新我的答案.

更新:

我可以在Laravel 5.3中确认该name方法不可用.如果5.4支持,则无法确认

泰勒接受我的公关在5.5中正式记录这个:

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


Uza*_*air 5

Laravel 5.5 之后的所有更新使用

Route::resource('faqs', 'FaqController', ['as' => 'faqs']);
Run Code Online (Sandbox Code Playgroud)

如果我们不在['as' => 'faqs']上面的代码中使用,那么它也将工作相同。

[更新]

重要的是要记住,这将适用于“资源

例如:

Route::resource('admin/posts/tags', 'PostTagController', ['as' => 'posts']);
Run Code Online (Sandbox Code Playgroud)

结果会像

 POST      | admin/posts/tags                  | posts.tags.store
 GET|HEAD  | admin/posts/tags                  | posts.tags.index
 GET|HEAD  | admin/posts/tags/create           | posts.tags.create
 DELETE    | admin/posts/tags/{tag}            | posts.tags.destroy
 PUT|PATCH | admin/posts/tags/{tag}            | posts.tags.update
 GET|HEAD  | admin/posts/tags/{tag}            | posts.tags.show
 GET|HEAD  | admin/posts/tags/{tag}/edit       | posts.tags.edit
Run Code Online (Sandbox Code Playgroud)


Bed*_*ang 5

使用 Laravel 8 进行测试:

您可以将资源路由的名称定义为将名称作为可选参数传递。例如:

use App\Http\Controllers\UsersController;

Route::resource('reservations', UsersController::class, ['names' => 'users']);
Run Code Online (Sandbox Code Playgroud)

上面的例子定义了诸如等的路由users.indexusers.store

您还可以将路由名称传递为:

Route::resource('reservations', UsersController::class, ['names' => 'admin.users']);
Run Code Online (Sandbox Code Playgroud)

它将定义带有前缀的路由,admin例如admin.users.indexadmin.users.store