Laravel Vuejs 实战:开发知乎 (7)验证问题表单字段

上一节代码中已经实现 下面代码中的validate内部配置就是:

  1 public function store(Request $request)
  2     {
  3         //
  4         $data = $request->validate([
  5             'title' => 'required|min:8',
  6             'content' => 'required|min:8',
  7         ]);
  8 
  9         $data['user_id'] = auth()->user()->id;
 10 
 11         $question = Question::create($data);
 12 
 13         return redirect()->route('questions.show', $question);
 14     }

注:validate方法详见:表单验证

且 create.blade.php中也已经使用

  1 <p class="text text-danger"> @error('title') {{ $message }} @enderror </p>
  2 
  3  <p class="text text-danger"> @error('content') {{ $message }} @enderror </p>
  4 

实现错误提示。不过差一个错误后,留存用户上一次填写的内容,输出给用户用于再次修改,


然后代码如下:

  1 @extends('layouts.app')
  2 @section('content')
  3     @include('vendor.ueditor.assets')
  4     <div class="container">
  5         <div class="row">
  6             <div class="col-md-8 col-md-offset-2">
  7                 <div class="card">
  8                     <div class="card-header">
  9                         发布问题
 10                     </div>
 11                     <div class="card-body">
 12                         <form action="{{ route('questions.store') }}" method="post">
 13                             {{--注意要有csrftoken--}}
 14                             @csrf
 15                             <div class="form-group">
 16                                 <label for="title">标题</label>
 17                                 <input type="text" name="title" class="form-control" placeholder="标题" id="title"
 18                                        value="{{ old('title') }}">
 19                                 <p class="text text-danger"> @error('title') {{ $message }} @enderror </p>
 20                             </div>
 21                             <!-- 编辑器容器 -->
 22                             <script id="container" name="content" type="text/plain">{!! old('content') !!}</script>
 23                             <p class="text text-danger"> @error('content') {{ $message }} @enderror </p>
 24                             <!--发布按钮-->
 25                             <button type="submit" class="btn btn-primary mt-2 float-md-right">发布问题</button>
 26                         </form>
 27                     </div>
 28                 </div>
 29             </div>
 30         </div>
 31     </div>
 32 
 33     <!-- 实例化编辑器 -->
 34     <script type="text/javascript">
 35         var ue = UE.getEditor('container');
 36         ue.ready(function () {
 37             ue.execCommand('serverparam', '_token', '{{ csrf_token() }}'); // 设置 CSRF token.
 38         });
 39     </script>
 40 
 41 @endsection


当然如果验证要求比较多,可以执行:

  1 php artisan make:request QuestionStoreRequest

然后将QuestionController.php文件中验证部分注释掉,我们将使用依赖注入QuestionStoreRequest实例的方式处理请求验证,

  1 <?php
  2 
  3 namespace App\Http\Controllers;
  4 
  5 use App\Http\Requests\QuestionStoreRequest;
  6 use App\Models\Question;
  7 use App\User;
  8 use Illuminate\Http\Request;
  9 
 10 class QuestionController extends Controller
 11 {
 12     public function __construct()
 13     {
 14         $this->middleware('auth', ['except' => ['index', 'show']]);//非注册用户只能查看不能编辑添加更改删除
 15     }
 16 
 17     /**
 18      * Display a listing of the resource.
 19      *
 20      * @return \Illuminate\Http\Response
 21      */
 22     public function index()
 23     {
 24         //
 25 
 26     }
 27 
 28 
 29     /**
 30      * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
 31      */
 32     public function create()
 33     {
 34         //
 35         return view('questions.create');
 36     }
 37 
 38 
 39     /**
 40      * @param QuestionStoreRequest $request
 41      * @return \Illuminate\Http\RedirectResponse
 42      */
 43     public function store(QuestionStoreRequest $request)//依赖注入QuestionStoreRequest实例
 44     {
 45         //
 46 //        $data = $request->validate([
 47 //            'title' => 'required|min:8',
 48 //            'content' => 'required|min:28',
 49 //        ]);
 50         $data = $request->all();
 51         $data['user_id'] = auth()->user()->id;
 52 
 53         $question = Question::create($data);
 54 
 55         return redirect()->route('questions.show', $question);
 56     }
 57 
 58 
 59     /**
 60      * @param Question $question
 61      * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
 62      */
 63     public function show(Question $question)
 64     {
 65         //
 66         return view('questions.show', compact('question'));
 67     }
 68 
 69     /**
 70      * Show the form for editing the specified resource.
 71      *
 72      * @param int $id
 73      * @return \Illuminate\Http\Response
 74      */
 75     public function edit($id)
 76     {
 77         //
 78     }
 79 
 80     /**
 81      * Update the specified resource in storage.
 82      *
 83      * @param \Illuminate\Http\Request $request
 84      * @param int $id
 85      * @return \Illuminate\Http\Response
 86      */
 87     public function update(Request $request, $id)
 88     {
 89         //
 90     }
 91 
 92     /**
 93      * Remove the specified resource from storage.
 94      *
 95      * @param int $id
 96      * @return \Illuminate\Http\Response
 97      */
 98     public function destroy($id)
 99     {
100         //
101     }
102 }
103 
104 

将表单的验证移动到生成的Requests/QuestionStoreRequest.php文件内,代码如下:

  1 <?php
  2 
  3 namespace App\Http\Requests;
  4 
  5 use Illuminate\Foundation\Http\FormRequest;
  6 
  7 class QuestionStoreRequest extends FormRequest
  8 {
  9     /**
 10      * Determine if the user is authorized to make this request.
 11      *
 12      * @return bool
 13      */
 14     public function authorize()
 15     {
 16         //一般判断当前用户是否有权发送本实例的请求,先默认设置为true,不过可以先写一个判断当前用户是否是请求中的用户来判断返回值
 17 
 18         return true;
 19     }
 20 
 21     /**
 22      * Get the validation rules that apply to the request.
 23      * 验证规则
 24      * @return array
 25      */
 26     public function rules()
 27     {
 28         return [
 29             //
 30             'title' => 'required|min:8',
 31             'content' => 'required|min:28',
 32         ];
 33     }
 34 
 35     public function messages()
 36     {
 37 //        return parent::messages(); // TODO: Change the autogenerated stub
 38         //错误提示
 39         return [
 40             'title.required' => '标题必须要输入的哦!',
 41             'title.min' => '标题长度要大于8个的哦!',
 42             'content.required' => '内容必须要输入的哦!',
 43             'content.min' => '内容长度必须要大于28个的哦!',
 44         ];
 45     }
 46 }
 47 
 48 
posted @ 2020-02-28 00:34  dzkjz  阅读(324)  评论(0编辑  收藏  举报