重定向回自定义请求类中的错误和输入:Laravel 5


Redirect back with errors and input in custom request class : Laravel 5

我有一些原始代码,如下所示,在MySQL数据库中进行表单验证和保存过程。

原始代码

public function store(Request $request)
{
    $v = 'Validator::make($request->all(), [
        'Category' => 'required|unique:tblcategory|max:25|min:5'
    ]);
    if ($v->fails()) {
        return 'Redirect::back()
                    ->withErrors($v)
                    ->withInput();
    }
    ...
    //code to save the record in database is here....
    ...
}

然后我遵循了这篇文章并修改了上面的函数,现在它看起来如下。

public function store(CategoryRequest $request)
{
    ...
    //code to save the record in database is here....
    ...
}

及以下是请求类

class CategoryRequest extends Request
{
    protected $redirect = 'Redirect::back()->withErrors($v)->withInput();
    public function authorize()
    {
        return false;
    }
    public function rules()
    {
        return [
            'Category' => 'required|unique:tblcategory|max:25|min:5'
        ];
    }
}

错误详细信息

语法错误,意外的"(",应为"、"或";"

这个错误出现在下面的行。

protected $redirect = 'Redirect::back()->withErrors($v)->withInput();

我是不是错过了什么?

当验证失败时,有多种方法可以告诉Laravel该怎么做。一种方法是覆盖response()方法,并按如下方式设置自己的响应。。。

class CategoryRequest extends Request
{
    public function response(array $errors){
        return 'Redirect::back()->withErrors($errors)->withInput();
    }
    public function authorize()
    {
        return false;
    }
    public function rules()
    {
        return [
            'Category' => 'required|unique:tblcategory|max:25|min:5'
        ];
    }
}

Laravel的默认响应是将您重定向到带有错误和输入值的上一页,因此在您的情况下可能不需要上面的代码。

在Laravel 8中,上面的内容发生了变化,所以response函数对我不起作用,而getRedirectUrl则起作用。这是的代码片段

protected function getRedirectUrl()
{
    $url = $this->redirector->getUrlGenerator();
    return $url->previous();
}