Laravel'必需'规则不适用于Request

时间:2018-02-15 22:03:16

标签: php laravel

我正在使用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。如果没有请求规则,我的代码就会按预期工作。

有什么想法吗?

1 个答案:

答案 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.