我是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文献中的一些东西。
谢谢你的解释。
这需要是一样的,让laravel知道他需要为我们创建什么对象。
Route::resource
为您提供了一些路由,其中包含基本url(https://laravel.com/docs/8.x/controllers#actions-由资源控制器处理(
因此,一旦定义了Route::resource("密码",CepageController::class(您将定义以下路线:
-
谓词URI操作路由名称
-
GET/cepageCepageController@indexcepage.index
-
GET/cepage/createCepageController@createcepage.创建
-
POST/cepageCepageController@storecepage.store
-
GET/cepage/{cepage_id}CepageController@showcepage.show
-
GET/cepage/{cepage_id}/editCepageController@editcepage.edit
-
PUT/PATCH/cepage/{cepage_id}CepageController@updatecepage.update
-
DELETE/cepage/{cepage_id}CepageController@destroycepage.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
}