web-dev-qa-db-ja.com

Laravel 5フォームリクエストの検証で禁止エラーが返される

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が返されるので、そこに問題があると思います。

提出時に「禁止」と表示されている理由を教えていただければ幸いです。

15
user860511

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();
}
34
Emeka Mbah

この所有者確認をリクエストと承認のauthorize()メソッドに追加します

public function authorize()
{
    return \Auth::check();
}
3
Peter Papp