如何在 Laravel 5 中验证路由参数?

2022-08-30 14:54:34

如您所知,Laravel 5改变了您调用的方式,旧的方式是调用,但现在在base Controller类中存在特征,但是该方法接受请求作为值数组,但是当您定义路由参数时,这些值不会存储在 中,那么我该如何验证这些参数?validatorvalidator facadeValidatesRequestsvalidateRequest

编辑:

路线:

Route::get('/react-api/{username}', 'ProfileController@getUsername');

控制器:

public function getUsername(Request $request, $username)
{
     $v = $this->validate($request, ['username' => 'required']);
}

那么,问题如何验证此用户名参数?


答案 1

如果您计划直接在控制器方法中执行此操作,则可以执行以下操作:

    public function getUser(Request $request)
    {
        $request->merge(['id' => $request->route('id')]);
        $request->validate([
            'id' => [
                'required',
                'exists:users,id'
            ]
        ]);
    }

若要在自定义类中执行此操作,请添加以下内容:FormRequest

    protected function prepareForValidation() 
    {
        $this->merge(['id' => $this->route('id')]);
    }

在您的方法中:rules

    public function rules()
    {
        return [
            'id' => [
                'required',
                'exists:users,id'
            ]
        ];
    }

答案 2

Manix的答案对我不起作用,我遇到了与Iliass相同的问题。问题是路由参数不会自动提供给 FormRequest。我最终覆盖了我特定的FormRequest类中的all()函数:

public function all()
{
    // Include the next line if you need form data, too.
    $request = Input::all();
    $request['username'] = $this->route('username');
    return $request
}

然后,您可以像往常一样编写规则:

public function rules()
{
    return [
        'username' => 'required',
    ];
}

推荐