使用Laravel 4.2,是否可以为资源控制器路由分配名称?我的路线定义如下:
Route::resource('faq', 'ProductFaqController');
我尝试在路线中添加名称选项,如下所示:
Route::resource('faq', 'ProductFaqController', array("as"=>"faq"));
但是,当我点击/ faq路线并在我的视图中放置{{ Route::currentRouteName() }}
时,它会产生faq.faq.index
而非faq
。
答案 0 :(得分:131)
使用资源控制器路由时,它会自动为其创建的每个路由生成名称。 Route::resource()
基本上是一个辅助方法,然后为您生成单独的路由,而不是您需要手动定义每个路由。
您可以通过在Laravel 4中将php artisan routes
或Laravel 5中的php artisan route:list
键入终端/控制台来查看生成的路径名称。您还可以在资源控制器文档页面(Laravel 4.x | Laravel 5.x)上查看生成的路径名称类型。
有两种方法可以修改资源控制器生成的路由名称:
提供names
数组作为第三个参数$options
数组的一部分,每个键都是资源控制器方法(索引,存储,编辑等),值为你要给路线的名字。
Route::resource('faq', 'ProductFaqController', [
'names' => [
'index' => 'faq',
'store' => 'faq.new',
// etc...
]
]);
指定as
选项以定义每个路由名称的前缀。
Route::resource('faq', 'ProductFaqController', [
'as' => 'prefix'
]);
这会为您提供prefix.faq.index
,prefix.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.index
,users.store
等的路由。
您还可以将路线名称传递为:
Route::resource('reservations', UsersController::class, ['names' => 'admin.users']);
这将定义以admin
为前缀的路由,例如admin.users.index
,admin.users.store
答案 7 :(得分:0)
遇到和你一样的错误。 对我来说,它通过添加命名空间/ControllerName
的整个路径起作用Route::resource('staffs', 'App\Http\Controllers\StaffController');