为什么put方法中设置的参数没有传递?
Why parameter set in put method is not passed?
运行 使用 sanctum id 参数激活方法 我看到 id 参数未传递到激活控制操作中。
在 routes/api.php 中:
Route::middleware('auth:sanctum')->group( function () {
Route::post('logout', [AuthController::class, 'logout']);
Route::resource('ads', AdController::class);
Route::put('ads/{id}/activate', [AdController::class, 'activate']);
});
在邮递员中我将参数作为http://server.com/api/ads/7/activate传递,
但问题是 app/Http/Controllers/API/AdController.php :
public function activate(Request $request, Ad $ad)
{
\Log::info(varDump($ad->id, ' -1 activate $ad->id::')); // this parameter is null - and error next :
...
} // public function activate(Ad $ad)
在LaravelTelescope我看到详情了:
Request Details
Time November 26th 2021, 5:08:08 PM (1:46m ago)
Hostname master-laptop
Method PUT
Controller Action App\Http\Controllers\API\AdController@activate
Middleware api, auth:sanctum
Path /api/ads/7/activate
Status 500
Duration 113 ms
IP Address 127.0.0.1
Memory usage 2 MB
Tags Auth:10
为什么id参数错误?
"laravel/framework": "^8.26.1",
"laravel/sanctum": "^2.8",
提前致谢!
您需要使用路由绑定您需要将 {id}
替换为 {ad}
Route::put('ads/{ad}/activate', [AdController::class, 'activate']);
如果您的问题仍未解决,您可以手动解决。
将此代码添加到 RouteServiceProvider
的 boot
方法
Route::model('ad', Ad::class);
如评论中所述,要使 Implicit binding 正常工作,路由中的 uri 段必须与方法的参数(变量)名称匹配,即
将{id}
更改为{ad}
,使其与activate
方法的$ad
参数匹配:
Route::put('ads/{ad}/activate', [AdController::class, 'activate']);
运行 使用 sanctum id 参数激活方法 我看到 id 参数未传递到激活控制操作中。 在 routes/api.php 中:
Route::middleware('auth:sanctum')->group( function () {
Route::post('logout', [AuthController::class, 'logout']);
Route::resource('ads', AdController::class);
Route::put('ads/{id}/activate', [AdController::class, 'activate']);
});
在邮递员中我将参数作为http://server.com/api/ads/7/activate传递, 但问题是 app/Http/Controllers/API/AdController.php :
public function activate(Request $request, Ad $ad)
{
\Log::info(varDump($ad->id, ' -1 activate $ad->id::')); // this parameter is null - and error next :
...
} // public function activate(Ad $ad)
在LaravelTelescope我看到详情了:
Request Details
Time November 26th 2021, 5:08:08 PM (1:46m ago)
Hostname master-laptop
Method PUT
Controller Action App\Http\Controllers\API\AdController@activate
Middleware api, auth:sanctum
Path /api/ads/7/activate
Status 500
Duration 113 ms
IP Address 127.0.0.1
Memory usage 2 MB
Tags Auth:10
为什么id参数错误?
"laravel/framework": "^8.26.1",
"laravel/sanctum": "^2.8",
提前致谢!
您需要使用路由绑定您需要将 {id}
替换为 {ad}
Route::put('ads/{ad}/activate', [AdController::class, 'activate']);
如果您的问题仍未解决,您可以手动解决。
将此代码添加到 RouteServiceProvider
boot
方法
Route::model('ad', Ad::class);
如评论中所述,要使 Implicit binding 正常工作,路由中的 uri 段必须与方法的参数(变量)名称匹配,即
将{id}
更改为{ad}
,使其与activate
方法的$ad
参数匹配:
Route::put('ads/{ad}/activate', [AdController::class, 'activate']);