MrS*_*ngh 6 parameters resources controller laravel
在我的 Laravel 应用程序中,我使用了普通路由,例如 GET、POST、PUT 以及所有带有各种控制器的路由。但是随着应用程序的进行,routes/api.php
文件变得非常庞大。因此,我正在使用“资源控制器”语法对其进行更改,以实现更简洁和精简的代码。
但是,早些时候我能够使用 url 中的“token”或“slug”参数来获取数据,例如:show/{token} & show($token)或show/{slug} & show($slug ),但现在每当我尝试这些或任何其他参数时,我都会404 not found
出错。因此,我只使用默认的“id”参数。
之前:
Route::get('/categories', 'CategoryController@index');
Route::get('/categories/{token}', 'CategoryController@show');
Run Code Online (Sandbox Code Playgroud)
现在:
Route::resource('/categories', 'CategoryController');
Run Code Online (Sandbox Code Playgroud)
有什么方法可以将默认的“id”参数更改为任何其他..?
upe*_*996 14
这也可以通过更改自定义密钥来实现。这里slug
指的是Category模型中的一列。
Route::resource('categories', 'CategoryController')->parameters([
'categories' => 'category:slug',
]);
Run Code Online (Sandbox Code Playgroud)
请注意:
在上面的调用中parameters
,键categories
应该与资源路由中使用的名称匹配:Route::resource('categories',...
。
值'category:slug'
应该与控制器方法签名中使用的名称相匹配,例如:public function edit(Category $category)
,与您希望在模型上使用的键的名称相结合Category
。
lag*_*box 12
对于资源路由,路由参数是资源名称,第一个参数,单数形式。
Route::resource('categories', 'CategoryController');
Run Code Online (Sandbox Code Playgroud)
会给你一个路由参数category
。您可以通过运行php artisan route:list
并查看定义的路由来看到这一点。
如果要为资源使用不同的参数名称,也可以通过覆盖参数来实现:
Route::resource('categories', 'CategoryController')->parameters([
'categories' => 'something',
]);
Run Code Online (Sandbox Code Playgroud)
现在使用的路由参数将是something
.
这仅与路由参数名称有关,与如何解析任何绑定无关,除非您有专门为参数名称定义的显式路由模型绑定。
如果您使用隐式路由模型绑定,您将在模型本身上定义通过该getRouteKeyName
方法进行绑定的字段。[在 Laravel 的下一版本中,您将能够定义路由定义本身中使用的字段。]
Laravel 6.x 文档 - 控制器 - 资源控制器 - 命名资源参数
Laravel 6.x 文档 - 路由 - 模型绑定 - 隐式路由模型绑定 getRouteKeyName
归档时间: |
|
查看次数: |
6269 次 |
最近记录: |