Laravel 5 带有 ID 的表单请求验证 - 显示
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();
}
并在显示功能中 -
public function show($id, ShowClinicFormRequest $request)
{
return View::make('clinic.show', ['clinic' => Clinic::where('id', $id)->first()]);
}
但是,我得到的错误是:
ReflectionException in RouteDependencyResolverTrait.php line 53: Class
App\Http\Controllers\ShowClinicFormRequest does not exist
它显然不存在于该目录中,因为它不是控制器。
如有任何帮助,我们将不胜感激。
我认为您的表单请求位于 App\Http\Requests
命名空间中,因此您需要导入 class 或明确使用:
use App\Http\Requests\ShowClinicFormRequest;
或者只是
public function show($id, \App\Http\Requests\ShowClinicFormRequest $request)
{}
您也可以查看过滤器或 middlewares。
我想验证 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();
}
并在显示功能中 -
public function show($id, ShowClinicFormRequest $request)
{
return View::make('clinic.show', ['clinic' => Clinic::where('id', $id)->first()]);
}
但是,我得到的错误是:
ReflectionException in RouteDependencyResolverTrait.php line 53: Class App\Http\Controllers\ShowClinicFormRequest does not exist
它显然不存在于该目录中,因为它不是控制器。
如有任何帮助,我们将不胜感激。
我认为您的表单请求位于 App\Http\Requests
命名空间中,因此您需要导入 class 或明确使用:
use App\Http\Requests\ShowClinicFormRequest;
或者只是
public function show($id, \App\Http\Requests\ShowClinicFormRequest $request)
{}
您也可以查看过滤器或 middlewares。