如何解决Laravel 7.x在路由组中命名路由
我正在学习Laravel,我想使用前缀分组一些路由,并命名每条路由,这样我就得到了类似的东西
Route::prefix('customers')->group(
function(){
Route::get('/','CustomerController@index')->name('customers.index');
Route::get('/create','CustomerController@create')->name('customers.create');
Route::post('/','CustomerController@store')->name('customers.store');
});
我想避免在每个路线名称中写“客户”。。
我尝试使用 group 和 name ,但无法识别路由名称前缀“客户”。
Route::group(['prefix' => 'customers','name' => 'customers.'],function(){
Route::get('/','CustomerController@index')->name('index');
Route::get('/create','CustomerController@create')->name('create');
Route::post('/','CustomerController@store')->name('store');
});
我发现的另一种方法是使用 as 和 use ,但是代码看起来很多,看起来也不干净,实际上第一个看起来像更干净的方式。
Route::group([
'prefix' => 'customers','as' => 'customers.'
],['as'=>'index','uses' => 'CustomerController@index']);
Route::get('/create',['as'=>'create','uses' => 'CustomerController@create']);
Route::post('/',['as'=>'store','uses' => 'CustomerController@store']);
});
有更好的方法吗?
解决方法
RESTful资源控制器
RESTful资源控制器为您设置了一些默认路由,甚至为它们命名。
Route::resource('users','UsersController');
为您提供以下命名路线:
Verb Path Action Route Name
GET /users index users.index
GET /users/create create users.create
POST /users store users.store
GET /users/{user} show users.show
GET /users/{user}/edit edit users.edit
PUT|PATCH /users/{user} update users.update
DELETE /users/{user} destroy users.destroy
然后您将像这样设置控制器(动作=方法)
class UsersController extends BaseController {
public function index() {}
public function show($id) {}
public function store() {}
}
您还可以像这样选择包含或排除哪些操作:
Route::resource('users','UsersController',[
'only' => ['index','show']
]);
Route::resource('monkeys','MonkeysController',[
'except' => ['edit','create']
]);
取自Laravel - Route::resource vs Route::controller
,您只能在分组时使用->name(XYZ)
:
Route::prefix('customers')
->name('customers.')
->group(function () {
Route::get('/','CustomerController@index')->name('index');
Route::get('/create','CustomerController@create')->name('create');
Route::post('/','CustomerController@store')->name('store');
});
路线:
| | POST | customers | customers.store | App\Http\Controllers\CustomerController@store | web |
| | GET|HEAD | customers | customers.index | App\Http\Controllers\CustomerController@index | web |
| | GET|HEAD | customers/create | customers.create | App\Http\Controllers\CustomerController@create | web |
,
为什么不使用resource?
您只需执行以下操作即可用一行获得所需的结果:
Route::resource('customers','CustomerController')->only(['index','create','store']);
路线:
+----------+-------------------------------+
| Method | URI |
+----------+-------------------------------+
| GET|HEAD | customers |
| POST | customers |
| GET|HEAD | customers/create |
+----------+-------------------------------+
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。