laravel - 哪个是 ads/ad_locations 编辑器路径的有效语法?
问题描述
在我的 Laravel 8 应用程序中,我想制作 ads/ad_locations 编辑器的路线
Route::group(['middleware' => ['auth'], 'prefix' => 'admin', 'as' => 'admin.'], function () {
...
Route::group(['prefix' => 'ads'], function ($router) {
...
Route::resource(
'/{ad_id}/ad_locations',
AdLocationController::class
)->name('admin.ads.ad_locations');
但我得到错误清除路线:
$ php artisan route:cache
ArgumentCountError
Too few arguments to function Illuminate\Routing\PendingResourceRegistration::name(), 1 passed in /mnt/_work_sdb8/wwwroot/lar/AdsBackend8/routes/web.php on line 112 and exactly 2 expected
at vendor/laravel/framework/src/Illuminate/Routing/PendingResourceRegistration.php:110
106▕ * @param string $method
107▕ * @param string $name
108▕ * @return \Illuminate\Routing\PendingResourceRegistration
109▕ */
➜ 110▕ public function name($method, $name)
111▕ {
112▕ $this->options['names'][$method] = $name;
113▕
114▕ return $this;
1 routes/web.php:112
Illuminate\Routing\PendingResourceRegistration::name()
+3 vendor frames
5 routes/web.php:119
Illuminate\Support\Facades\Facade::__callStatic()
哪种语法有效以及如何在刀片文件中引用?
修改块:
我在 routes/web.php 中修改:
Route::group(['middleware' => ['auth'], 'prefix' => 'admin', 'as' => 'admin.'], function () {
Route::group(['prefix' => 'ads'], function ($router) {
Route::resource('/{ad_id}/ad_locations', AdLocationController::class, [
'names' => [
'index' => 'admin.ads.ad_locations.index',
'store' => 'admin.ads.ad_locations.store',
'edit' => 'admin.ads.ad_locations.edit',
]
]);
并成功运行命令:
php artisan route:cache
但在刀片文件中使用它:
<a class="btn btn-primary" href="{{ route('admin.ads.ad_locations.edit',[$ad_id, $nextAdLocation['id']]) }}">
{!! showAppIcon('edit') !!} Edit
</a>
我得到错误:
(Symfony\\Component\\Routing\\Exception\\RouteNotFoundException(code: 0): Route [admin.ads.ad_locations.edit] not defined. at /mnt/_work_sdb8/wwwroot/lar/AdsBackend8/vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php:429)
[stacktrace]
哪种方式是正确的?
谢谢!
解决方案
函数name()不适用于route::resource,因为它是路由的集合,它应该与单个路由一起使用,例如:
Route::get('user/create', [UserController::class, 'create'])->name('user.create');
您可以提供一个“名称”数组作为资源路由的第三个参数(选项)参数,例如:
Route::resource('user', UserController::class, [
'names' => [
'index' => 'admin.ads.ad_locations.index',
'store' => 'admin.ads.ad_locations.store',
// etc...
]
]);
或者,您可以使用 with作为关键字,就像您在路线中使用的关键字一样:
Route::group(['middleware' => ['auth'], 'prefix' => 'admin', 'as' => 'admin.ads.ad_locations.'], function () {
Route::group(['prefix' => 'ads'], function ($router) {
Route::resource('/{ad_id}/ad_locations', AdLocationController::class);
});
});
在上面的代码段中,我在“as”属性的值中使用了您的完整路线“admin.ads.ad_locations”名称。但是,最后一个将被视为每条路由的前缀,如下所示:
admin.ads.ad_locations.{ad_id}.store
admin.ads.ad_locations.{ad_id}.create
...
您还可以使用如下函数名称():
Route::resource('/{ad_id}/ad_locations', PhotoController::class)->names([
'create' => 'admin.ads.ad_locations.build'
'show' => 'admin.ads.ad_locations.view'
]);
问题的更正部分的答案:
因为您也在路线中使用“as”属性,所以为您生成的路线名称将是:
admin.admin.ads.ad_locations.store
admin.admin.ads.ad_locations.create
admin.admin.ads.ad_locations.create
您可以从路线中删除as属性,例如:
Route::group(['middleware' => ['auth'], 'prefix' => 'admin'], function () {
Route::group(['prefix' => 'ads'], function ($router) {
Route::resource('/{ad_id}/ad_locations', AdLocationController::class, [
'names' => [
'index' => 'admin.ads.ad_locations.index',
'store' => 'admin.ads.ad_locations.store',
'edit' => 'admin.ads.ad_locations.edit',
]
]);
});
});
或者,您可以避免使用“管理员”。在您的路线名称中,例如:
Route::group(['middleware' => ['auth'], 'prefix' => 'admin', 'as' => 'admin.'], function () {
Route::group(['prefix' => 'ads'], function ($router) {
Route::resource('/{ad_id}/ad_locations', AdLocationController::class, [
'names' => [
'index' => 'ads.ad_locations.index',
'store' => 'ads.ad_locations.store',
'edit' => 'ads.ad_locations.edit',
]
]);
});
});
推荐阅读
- laravel - 更新功能不断收到此错误:此路由不支持 PATCH 方法。支持的方法:GET、HEAD
- r - Dbplyr 错误:将表达式转换为数据类型 int 的算术溢出错误
- databricks - 在 pyspark/python 作业中访问 databricks 机密
- elasticsearch - Elasticsearch:在嵌套文档上执行“inner_hit”时,返回层次结构中匹配偏移量的所有字段
- swift - 如何将 SwiftUI 框架中 DatePicker 的外观更改为只有几个月和几年?
- javascript - 带有 CDN 的 Material.io
- browser - 如何在“hackerrank”的在线编程编辑器上启用所有默认的 emacs 键绑定?
- python-3.x - 用于 ECR 删除的 Boto3 服务员
- json - Concourse 在解组 JSON 时获取 bitbucket 资源错误:解码 JSON 时
- python - 从分配中的多个命令中获取退出代码