Laravel 依赖注入方式验证表单字段
```为优化控制器代码,提高代码可阅读性,故可以通过依赖注入的方式进行表单验证
例如需要验证的表单字段有title body
1 创建依赖注入类 StoreQuestionRequest
php artisan make:request StoreQuestionRequest
该命令会在App\Http\Request 目录下生成StoreQuestionRequest类
接下来找到这个类创建我们的验证规则
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreQuestionRequest extends FormRequest
{
// 如果需要用户登陆后才能使用,请将UserRequest类下面的authorize()里面的return false 改为 return true;
public function authorize()
{
return true;
}
//在该方法下面创建验证规则,具体验证规则可参考laravel表单验证规则
public function rules()
{
return [
'title' => 'required|min:10|max:255',
'body' => 'required|min:10'
];
}
//创建自定义错误提示
public function messages()
{
return [
'title.required' => '问题标题不能为空',
'title.min' => '问题标题最少10个字符',
'title.max' => '问题标题最多255个字符',
'body.required' => '问题内容不能为空',
'body.min' => '问题内容最少10个字符',
];
}
}
万事具备只欠东风
接下来去接受表单值方法的控制器中调用(就是需要进行表单验证的控制器),我的是在这个方法接受表单值,这里使用的StoreQuestionRequest 是之前创建的依赖注入类,
use App\Http\Requests\StoreQuestionRequest;
使用之前记得引入,使用之前记得引入,使用之前记得引入,重要的事情说三遍
//没有依赖注入之前是这样的
//public function store(Request $request) 使用依赖注入只需要将Request改为之前创建的依赖就行了
public function store(StoreQuestionRequest $request)
{
$question = Question::create([
'title' => $request->get('title'),
'body' => $request->get('body'),
'user_id' => Auth::id(),
]);
return redirect('question/'.$question->id)->with('msg',"问题发布成功");
}
引入过后就没什么事情了,就这么简单,表单数据验证不通过会自动返回错误信息保存在session中
在blade模板中加入条件判断,如果表单数据有错误,循环输入
@if($errors->all())
@foreach ($errors->all() as $message)
<p class="bg-warning" style="padding: 15px">{{$message}}</p>
@endforeach
@endif
本作品采用《CC 协议》,转载必须注明作者和本文链接