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 协议》,转载必须注明作者和本文链接
gangan
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!