我是 Laravel 的新用戶,我對 Laravel 路由 API 和控制器中的變數名稱有點困惑。這里有一個例子來解釋:一個 API 路由
Route::middleware('auth:sanctum')->group( function () {
Route::resource('cepage', CepageController::class);
});
對于 PUT 或 PATCH,我在 CepageController 中有這個功能:
public function update(Request $request, Cepage $cepage)
{
$input = $request->all();
$validator = Validator::make($input, [
'libelle' => 'required',
'abrege' => 'required'
]);
if($validator->fails()){
return $this->sendError($validator->errors());
}
$cepage->libelle = $input['libelle'];
$cepage->abrege = $input['abrege'];
$cepage->save();
return $this->sendResponse(new CepageResource($cepage), 'Cépage mis à jour');
}
如果您看到我的路由名稱“cepage”與控制器中函式宣告的 $cepage 變數名稱相同,則 Laravel 會更新資料庫中的記錄。
如果它們不相同,Laravel 在資料庫中創建一個新記錄。
為什么它們需要完全相同?
我想我錯過了 Laravel 檔案中的一些內容。
謝謝你的解釋。
uj5u.com熱心網友回復:
它需要相同,讓 laravel 知道他需要為我們創建什么物件。
Route::resource為你做幾條路線,基本網址給它(https://laravel.com/docs/8.x/controllers#actions-handled-by-resource-controller)
因此,一旦您定義了 Route::resource('cepage', CepageController::class) 您將定義以下路由:
動詞 URI 操作路由名稱
GET /cepage CepageController@index cepage.index
GET /cepage/create CepageController@create cepage.create
POST /cepage CepageController@store cepage.store
GET /cepage/{cepage_id} CepageController@show cepage.show
GET /cepage/{cepage_id}/edit CepageController@edit cepage.edit
PUT/PATCH /cepage/{cepage_id} CepageController@update cepage.update
洗掉 /cepage/{cepage_id} CepageController@destroy cepage.destroy
在控制器中,您需要遵循命名,因為在 url 中您只有物件的 id。但是如果你遵循命名,laravel 會通過它的 id 為你獲取物件。看:
public function update(Request $request, $cepage_id)
{
$cepage = Cepage::find($cepage_id);
//here you have to fetch the object for yourself to access it
}
public function update(Request $request, Cepage $cepage)
{
//here you can already access $cepage variable
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/366977.html
