Laravel 5.1のフォームリクエストの検証を使用して、リクエストが所有者からのものであるかどうかを承認しようとしています。ユーザーがテーブルの一部を更新しようとするときに検証が使用されますclinics
から_show.blade.php
_まで。
これまでの私のセットアップ:
routes.php:
_Route::post('clinic/{id}',
array('as' => 'postUpdateAddress', 'uses' => 'ClinicController@postUpdateAddress'));
_
ClinicController.php:
_public function postUpdateAddress($id,
\App\Http\Requests\UpdateClinicAddressFormRequest $request)
{
$clinic = Clinic::find($id);
$clinic->save();
return Redirect::route('clinic.index');
}
_
pdateClinicAddressFormRequest.php:
_public function authorize()
{
$clinicId = $this->route('postUpdateAddress');
return Clinic::where('id', $clinicId)
->where('user_id', Auth::id())
->exists();
}
_
Show.blade.php
_{!! Form::open(array('route' => array('postUpdateAddress', $clinic->id), 'role'=>'form')) !!}
{!! Form::close() !!}
_
Authorize関数内で
dd($clinicId)
を実行すると、null
が返されるので、そこに問題があると思います。
提出時に「禁止」と表示されている理由を教えていただければ幸いです。
Forbidden Errorを取得しています。フォームリクエストのauthorize()
メソッドがfalseを返すためです:
問題はこれです:$clinicId = $this->route('postUpdateAddress');
フォームリクエストのルートパラメータ値にアクセスするには、次のようにします。
$clinicId = \Route::input('id'); //to get the value of {id}
したがって、authorize()
は次のようになります。
public function authorize()
{
$clinicId = \Route::input('id'); //or $this->route('id');
return Clinic::where('id', $clinicId)
->where('user_id', Auth::id())
->exists();
}
この所有者確認をリクエストと承認のauthorize()メソッドに追加します
public function authorize()
{
return \Auth::check();
}