我有一些原始代码,如下所示,在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();
}