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