我正在使用laravel 5.5
我有一个我已经构建的请求,但required
规则无法正常工作。
路线
Route::get('v1/learning_centre/user/{userId}/course/list', 'API\LearningCentre@userCourses');
控制器
public function userCourses(GetUserCourses $request)
{
$courses = User::findOrFail($request->userId)
->courses()
->get();
return new CourseResourceCollection($courses);
}
请求
namespace App\Http\Requests\LearningCentre;
use Illuminate\Foundation\Http\FormRequest;
class GetUserCourses extends FormRequest {
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'userId' => 'required|integer'
];
}
/**
* Get the error messages for the defined validation rules.
*
* @return array
*/
public function messages()
{
return [
'userId.required' => 'A User is required',
];
} }
如果我关闭required
规则,我可以到达控制器。如果我在请求中有required
规则,我会得到302.我在phpunit中传入一个有效的userId。如果没有请求规则,我的代码就会按预期工作。
有什么想法吗?
答案 0 :(得分:1)
在这种情况下,您应该使用route model binding来验证所需的GET参数,而不是FormRequest类,正如名称所示,它适用于表单请求。
您的路线:
Route::get('v1/learning_centre/user/{user}/course/list', 'API\LearningCentre@userCourses');
你的控制器:
public function userCourses(User $user) {
如果缺少用户ID(或使用了无效用户ID),您的控制器将自动抛出ModelNotFoundException
,默认情况下,Laravel将返回为404.