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

时间:2014-08-13 15:28:30

标签: php laravel laravel-4

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

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

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

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

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

8 个答案:

答案 0 :(得分:131)

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

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

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

  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等路线。

答案 1 :(得分:13)

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

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

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

});

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

  • 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

答案 2 :(得分:4)

使用Laravel 5.5

Route :: resource('gallery','GalleryController',['as'=&gt;'photos']);

重要的是要记住“资源

例如,我从我的项目中发送了一些内容:

Route::resource('admin/posts/tags', 'PostTagController', ['as' => 'posts']);

答案 3 :(得分:2)

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

Route::resource('faq', 'ProductFaqController', ['names' => 'something']);

结果将是这样

something.index

您无需指定每条路线

答案 4 :(得分:1)

随后Laravel 5.5使用的所有更新

Route::resource('faqs', 'FaqController', ['as' => 'faqs']);

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

[已更新]

请记住,这将适用于“ 资源

例如:

Route::resource('admin/posts/tags', 'PostTagController', ['as' => 'posts']);

结果将是

 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

答案 5 :(得分:1)

您不需要在我测试过的laravel 5.7中的资源中设置名称。 它会自动从网址生成路由名称。

答案 6 :(得分:0)

经Laravel 8测试:

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

use App\Http\Controllers\UsersController;

Route::resource('reservations', UsersController::class, ['names' => 'users']);

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

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

Route::resource('reservations', UsersController::class, ['names' => 'admin.users']);

这将定义以admin为前缀的路由,例如admin.users.indexadmin.users.store

答案 7 :(得分:0)

遇到和你一样的错误。 对我来说,它通过添加命名空间/ControllerName

的整个路径起作用

Route::resource('staffs', 'App\Http\Controllers\StaffController');