我使用自定义请求类进行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');
}