Laravel API路由和控制器变量



我是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
}

最新更新