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:list
Laravel 5中键入生成的路径名称.您还可以在资源控制器文档页面(Laravel 4.x | Laravel 5.x)上查看生成的路由名称类型.
有两种方法可以修改资源控制器生成的路由名称:
提供names
数组作为第三个参数$options
数组的一部分,每个键是资源控制器方法(索引,存储,编辑等),值是您要为路径指定的名称.
Route::resource('faq', 'ProductFaqController', [
'names' => [
'index' => 'faq',
'store' => 'faq.new',
// etc...
]
]);
Run Code Online (Sandbox Code Playgroud)指定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)
并且您不需要指定每条路线
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
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)
使用 Laravel 8 进行测试:
您可以将资源路由的名称定义为将名称作为可选参数传递。例如:
use App\Http\Controllers\UsersController;
Route::resource('reservations', UsersController::class, ['names' => 'users']);
Run Code Online (Sandbox Code Playgroud)
上面的例子定义了诸如等的路由users.index
。users.store
您还可以将路由名称传递为:
Route::resource('reservations', UsersController::class, ['names' => 'admin.users']);
Run Code Online (Sandbox Code Playgroud)
它将定义带有前缀的路由,admin
例如admin.users.index
,admin.users.store