Laravel 5表单请求验证与ID - show


Laravel 5 form request validation with ID - show

我想验证Laravel中的资源控制器,以便用户只能访问clinic.show,如果他们是所述诊所的所有者。

我使用以下命令正确验证了这一点:

public function show($id)
{
    if (Clinic::where('id', $id)->where('user_id', Auth::id())->exists()) {
        return View::make('clinic.show', ['clinic' => Clinic::where('id', $id)
                     ->first()]);
} else {
    abort(401, 'Unauthorized action.');
}
}

然而,我认为这是不好的做法,我应该在Laravel中使用Form Request功能。

我创建了一个ShowClinicFormRequest.php并添加了以下代码:

public function authorize()
{
    $clinicId = $this->route('clinic');
    return Clinic::where('id', $clinicId)
    ->where('user_id', Auth::id())
    ->exists();
}

在show函数内-

public function show($id, ShowClinicFormRequest $request)
{
    return View::make('clinic.show', ['clinic' => Clinic::where('id', $id)->first()]);
}
然而,我得到的错误是:

routedependencyresolvertrai .php第53行中的ReflectionExceptionApp'Http'Controllers'ShowClinicFormRequest不存在

它显然不存在于该目录中,因为它不是控制器。

我相信您的表单请求位于App'Http'Requests名称空间中,因此您需要导入类或显式使用:

use App'Http'Requests'ShowClinicFormRequest;

还是

public function show($id, 'App'Http'Requests'ShowClinicFormRequest $request)
{}

您可能还需要看一下过滤器或中间件