Laravel 在 api 中透過 put 方法傳入參數時進行型別轉換

routes\api 中的參數要與 controller 中的參數一致,這樣子 Laravel 會自動將傳入的 id 參數,進行型別轉換,這樣就可以得到該筆資料,不需要自行撰寫程式取得。

routes\api 中的參數

首先在 api 中,建立一筆 Route::put ,這裡要注意 {company} 要與 Controller 函數中的參數一致。

image
PHP
Route::controller(CompanyController::class)->group( function() {
	// 使用 Resource 的 CRUD 內定函數
	Route::resource('auth/organize/companies', CompanyController::class);
	Route::get('auth/organize/user/companies', 'getUserCompanies');
	Route::put('auth/organize/user/companies/{company}', 'putUserCompany');
})

Controller 中的傳入的參數

在函數中,參數 $company 要與 api 的參數一致,這時當傳入該筆 id 值時,系統會自動取得該筆資料,並以 Model: Company 的型別呈現。

Request $request 則是前端傳入需要更新的資料。

這裡的參數並沒有順序,可以寫成 putUserCompany(Company $company, Request $request)

image 1
PHP
public function putUserCompany(Company $company, Request $request)
{
	$input = $request->all();
	$formData = $request->form_data;
	$id = $formData['id'];

	// 檢驗表單欄位
	$validator = Validator::make($formData, [
		'id' => 'required',
		'user_id' => 'required',
		'code' => 'required',
		'name' => 'required',
	]);

	if ($validator->fails()) {
		return $this->sendError('Validation Error.', $validator->errors());
	}
	//$userCompany = Company::where('id',$id )->get(); // 此行可省略
	$company->update($formData);

	return $company;
}

Postman 測試

在 postman 測試時,上方 PUT 網址最後的 1 ,即是 api 檔案中 Route::put 裡的 {company} 參數,下方 row 的 json 資料,則是傳送的 Request。

image 2
JSON
{
    "form_data":{
        "id":1,
        "user_id":1,
        "code": "87654321",
        "name": "超級管理者的範例公司",
        "tel": "0487654321"
    }
}

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


內容索引