使用laravel Request类时,在数组错误时调用成员函数fails()



我使用自定义请求类进行laravel表单验证。

这是我的请求类

class ContactUsRequest extends FormRequest
{
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'lname' => 'required'
];
}
/**
* Get the error messages for the defined validation rules.
*
* @return array
*/
public function messages()
{
return [
'lname.required' => 'please enter the last name'
];
}
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
}

这就是我所说的

public function send(ContactUsRequest $request) {
$validator = $request->validated();
if ($validator->fails()) {
return redirect('/contactus')
->withErrors($validator)
->withInput();
} else {
ContactUs::create($request->all());
return redirect('/contactus');
}
}

但当我输入正确的值时,我会得到这个,

Symfony\Component\Debug\Exception\FatalThrowableError(E_ERROR(对数组上成员函数的调用失败((

这是因为请求对象会自动为您执行此操作,并且您不需要手动重定向回$validator变量包含validated inputs,因此在您的情况下,您不需要执行任何操作,并且可以删除if并安全地重定向

public function send(ContactUsRequest $request) {
ContactUs::create($request->validated());
return redirect('/contactus');
}
}

使用表单请求类

如果验证失败,将自动生成重定向响应,将用户送回其以前的位置。错误也会被闪到会话中,以便显示。如果请求是AJAX请求,则会向用户返回一个具有422状态代码的HTTP响应,其中包括验证错误的JSON表示。

为了捕获验证失败,您可以使用验证器facade

E.g

use IlluminateSupportFacadesValidator;
//...
public function send(Request $request) {
$validator = Validator::make($request->all(), [
'lname' => 'required'
// ...
]);
if ($validator->fails()) {
return redirect('/contactus')
->withErrors($validator)
->withInput();
}
ContactUs::create($request->all());
return redirect('/contactus');
}

表单请求验证文档

手动创建验证器文档

我们可以保持ContactUsRequest这样。

public function send(ContactUsRequest $request) {
$validator = $request->validated();
ContactUs::create($request->all());
return redirect('/contactus');
}

最新更新