Laravel API 路由和控制器变量

Laravel API routes and Controller variable

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

  • DELETE /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
}