zoukankan      html  css  js  c++  java
  • 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 AppHttpControllers;
      4 
      5 use AppHttpRequestsQuestionStoreRequest;
      6 use AppModelsQuestion;
      7 use AppUser;
      8 use IlluminateHttpRequest;
      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 IlluminateHttpResponse
     21      */
     22     public function index()
     23     {
     24         //
     25 
     26     }
     27 
     28 
     29     /**
     30      * @return IlluminateContractsViewFactory|IlluminateViewView
     31      */
     32     public function create()
     33     {
     34         //
     35         return view('questions.create');
     36     }
     37 
     38 
     39     /**
     40      * @param QuestionStoreRequest $request
     41      * @return IlluminateHttpRedirectResponse
     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 IlluminateContractsViewFactory|IlluminateViewView
     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 IlluminateHttpResponse
     74      */
     75     public function edit($id)
     76     {
     77         //
     78     }
     79 
     80     /**
     81      * Update the specified resource in storage.
     82      *
     83      * @param IlluminateHttpRequest $request
     84      * @param int $id
     85      * @return IlluminateHttpResponse
     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 IlluminateHttpResponse
     97      */
     98     public function destroy($id)
     99     {
    100         //
    101     }
    102 }
    103 
    104 

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

      1 <?php
      2 
      3 namespace AppHttpRequests;
      4 
      5 use IlluminateFoundationHttpFormRequest;
      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 
  • 相关阅读:
    设计模式-享元模式
    设计模式-外观模式
    设计模式-桥接模式
    设计模式-适配器模式
    设计模式-代理模式
    java设计模式中用到的UML图
    VS code 初次安装配置
    CMD部分操作、BAT、以及VS SQL部分快捷键
    网络部分
    CMD 中certutil 操作命令
  • 原文地址:https://www.cnblogs.com/dzkjz/p/12375427.html
Copyright © 2011-2022 走看看