zoukankan      html  css  js  c++  java
  • Laravel小项目之第4节 Laravel-通过表单实现新增及操作状态提示功能

    第4节 Laravel-通过表单实现新增及操作状态提示功能
    4.1 显示新增表单视图
    4.2 通过模型实现新增
    4.3 操作状态提示
    4.1 显示新增表单视图
    修改边栏的链接
    
    
    esourcesviewssharedsiderbar.blade.php
    
    <div class="col-md-3">
        <div class="list-group">
            <a href="{{ url('/') }}" class="list-group-item active">学生列表</a>
            <a href="{{ url('student/create') }}" class="list-group-item">新增学生</a>
        </div>
    </div>
    
    esourcesviewssharedmessage.blade.php
    
    <div class="alert alert-danger">
        <ul>
            <li>姓名不能为空</li>
            <li>年龄只能为整数</li>
            <li>请选择性别</li>
        </ul>
    </div>
    
    esourcesviewsstudentcreate.blade.php
    
    @extends('layout/student')
     
    @section('content')
        <!-- 所有的错误提示 -->
        @include('shared/message')
        <!-- 自定义内容区域 -->
        <div class="panel panel-default">
            <div class="panel-heading">新增学生</div>
            <div class="panel-body">
                <form class="form-horizontal">
                    <div class="form-group">
                        <label for="name" class="col-sm-2 control-label">姓名</label>
     
                        <div class="col-sm-5">
                            <input type="text" class="form-control" id="name" placeholder="请输入学生姓名">
                        </div>
                        <div class="col-sm-5">
                            <p class="form-control-static text-danger">姓名不能为空</p>
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="age" class="col-sm-2 control-label">年龄</label>
     
                        <div class="col-sm-5">
                            <input type="text" class="form-control" id="age" placeholder="请输入学生年龄">
                        </div>
                        <div class="col-sm-5">
                            <p class="form-control-static text-danger">年龄只能为整数</p>
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-2 control-label">性别</label>
     
                        <div class="col-sm-5">
                            <label class="radio-inline">
                                <input type="radio" name="sex" value="option1"> 未知
                            </label>
                            <label class="radio-inline">
                                <input type="radio" name="sex" value="option2"></label>
                            <label class="radio-inline">
                                <input type="radio" name="sex" value="option3"></label>
                        </div>
                        <div class="col-sm-5">
                            <p class="form-control-static text-danger">请选择性别</p>
                        </div>
                    </div>
                    <div class="form-group">
                        <div class="col-sm-offset-2 col-sm-10">
                            <button type="submit" class="btn btn-primary">提交</button>
                        </div>
                    </div>
                </form>
            </div>
        </div>
    @endsection
    appHttpControllersStudentController.php
    
    /**
     * 新增表单页面,表单提交到当前页
     *
     * @param
     * @return    void
     * @author    webjust [604854119@qq.com]
     */
    public function create()
    {
        return view('student/create');
    }
    appHttp
    outes.php
    
    Route::get('/', ['uses' => 'StudentController@index']);
     
    // 新增表单路由
    Route::any('student/create', ['uses' => 'StudentController@create']);
    添加hover效果。
    esourcesviewssharedsiderbar.blade.php
    
    <div class="col-md-3">
        <div class="list-group">
            <a href="{{ url('/') }}"
            class="list-group-item {{ Request::path() == '/' ? 'active' : '' }}">学生列表</a>
            <a href="{{ url('student/create') }}"
            class="list-group-item {{ Request::path() == 'student/create' ? 'active' : '' }}">新增学生</a>
        </div>
    </div>
    这里使用了 Request::path() 方法,更多Request facade 方法可以查看手册:https://cs.laravel-china.org/#requests
    
    
    
    4.2 通过模型实现新增
    给form表单添加action:
    
    <form class="form-horizontal" method="post" action="{{ url('student/create') }}">
    appHttpControllersStudentController.php
    
    public function create(Request $request)
    {
        // 判断是POST请求,也就是提交表单时走这个区间
        if($request->isMethod('POST'))
        {
            echo "post";
        }
     
        return view('student/create');
    }
    此时会报 TokenMismatchException in VerifyCsrfToken.php line 67: 的错误。
    
    Laravel 提供简单的方法保护你的应用程序不受到 跨网站请求伪造 攻击。跨网站请求伪造是一种恶意的攻击,破坏份子伪造 已通过身份检验的用户身份 来运行未经授权的命令。
    Laravel 会自动生成一个 CSRF token 给每个用户的 Session。该 token 用来验证用户是否为实际发出请求的用户。可以使用 csrf_field 辅助函数来生成一个包含 CSRF token 的 _token 隐藏表单字段。
    更多查看:http://d.laravel-china.org/docs/5.2/routing#csrf-protection
    
    在Blade模板引擎中使用:
    
    {{ csrf_field() }}
    修改 input 字段的属性:name="Student[name]" 这样可以获得一个数组下标以模型名命名的数组。
    
    
    esourcesviewsstudentcreate.blade.php
    
    <form class="form-horizontal" method="post" action="{{ url('student/create') }}">
        {{ csrf_field() }}
        <div class="form-group">
            <label for="name" class="col-sm-2 control-label">姓名</label>
     
            <div class="col-sm-5">
                <input type="text" name="Student[name]" class="form-control" id="name" placeholder="请输入学生姓名">
            </div>
            <div class="col-sm-5">
                <p class="form-control-static text-danger">姓名不能为空</p>
            </div>
        </div>
        <div class="form-group">
            <label for="age" class="col-sm-2 control-label">年龄</label>
     
            <div class="col-sm-5">
                <input type="text" name="Student[age]" class="form-control" id="age" placeholder="请输入学生年龄">
            </div>
            <div class="col-sm-5">
                <p class="form-control-static text-danger">年龄只能为整数</p>
            </div>
        </div>
        <div class="form-group">
            <label class="col-sm-2 control-label">性别</label>
     
            <div class="col-sm-5">
                <label class="radio-inline">
                    <input type="radio" name="Student[sex]" value="2"> 未知
                </label>
                <label class="radio-inline">
                    <input type="radio" name="Student[sex]" value="1"></label>
                <label class="radio-inline">
                    <input type="radio" name="Student[sex]" value="0"></label>
            </div>
            <div class="col-sm-5">
                <p class="form-control-static text-danger">请选择性别</p>
            </div>
        </div>
        <div class="form-group">
            <div class="col-sm-offset-2 col-sm-10">
                <button type="submit" class="btn btn-primary">提交</button>
            </div>
        </div>
    </form>
    修改:appHttpControllersStudentController.php
    
    public function create(Request $request)
    {
        // 判断是POST请求,也就是提交表单时走这个区间
        if($request->isMethod('POST'))
        {
            $data = $request->input('Student');
            var_dump($data);
        }
     
        return view('student/create');
    }
    访问:http://example.com/student/create 提交表单,效果:
    
    
    
    实现模型的添加操作:
    
    // 判断是POST请求,也就是提交表单时走这个区间
    if($request->isMethod('POST'))
    {
        $data = $request->input('Student');
        // var_dump($data);
        $data['created_time'] = time();
        $data['updated_time'] = time();
     
        // 模型的添加方法
        $ret = Student::insert($data);
        var_dump($ret);
    }
    添加数据测试,查询数据库,可以看到新增加了1条记录哦!(^__^) 嘻嘻……
    
    
    
    使用重定向方法:redirect()
    
    public function create(Request $request)
    {
        // 判断是POST请求,也就是提交表单时走这个区间
        if($request->isMethod('POST'))
        {
            $data = $request->input('Student');
            // var_dump($data);
            $data['created_time'] = time();
            $data['updated_time'] = time();
     
            // 模型的添加方法
            $ret = Student::insert($data);
            if($ret)
            {
                return redirect('/');
            } else{
                return redirect('student/create');
            }
        }
     
        return view('student/create');
    }
    4.3 操作状态提示
    重定向并加上 Session 闪存数据
    
    通常重定向至新的 URL 时会一并 写入闪存数据至 session。所以为了方便,你可以利用链式调用的方式创建一个 RedirectResponse 的实例 并 闪存数据至 Session。这对于在一个动作之后保存状态消息相当方便:
    
    return redirect('/')->with('success', '操作成功!');
    当然,在用户重定向至新的页面后,你可以获取并显示 session 的闪存数据。举个例子,使用 Blade 的语法:
    
    @if (session('success'))
        <div class="alert alert-success">
            {{ session('success') }}
        </div>
    @endif
    修改如下:
    
    // 模型的添加方法
    $ret = Student::insert($data);
    if($ret)
    {
        return redirect('/')->with('success', '添加成功!');
    } else{
        return redirect('student/create')->with('error', '添加失败!');
    }
    
    esourcesviewssharedsuccess.blade.php
    
    @if(Session::has('success'))
    <!-- 成功提示框 -->
    <div class="alert alert-success alert-dismissible" role="alert">
        <button type="button" class="close" data-dismiss="alert" aria-label="Close">
            <span aria-hidden="true">&times;</span>
        </button>
        <strong>成功!</strong> {{Session::get('success')}}
    </div>
    @endif
     
    @if(Session::has('error'))
    <!-- 失败提示框 -->
    <div class="alert alert-danger alert-dismissible" role="alert">
        <button type="button" class="close" data-dismiss="alert" aria-label="Close">
            <span aria-hidden="true">&times;</span>
        </button>
        <strong>失败!</strong> {{Session::get('error')}}
    </div>
    @endif
    同理,我们也可以使用 Session类的方法。如:
    
    @if(Session::has('success'))
    {{Session::get('success')}}
    为了显示最新添加的数据,我们采用倒序的排列方式:
    
    public function index()
    {
        // 对 Eloquent 模型进行分页
        $students = Student::orderby('id', 'desc')->paginate(5);
     
        // 渲染 student/index 视图,并传递查询出来的全部数据
        return view('student/index', ['students' => $students]);
    }
    最终效果如下:

    最终效果如下:

     

    第4节 Laravel-通过表单实现新增及操作状态提示功能

    1.  
      4.1 显示新增表单视图
    2.  
      4.2 通过模型实现新增
    3.  
      4.3 操作状态提示

    4.1 显示新增表单视图

    修改边栏的链接

    esourcesviewssharedsiderbar.blade.php

    1.  
      <div class="col-md-3">
    2.  
      <div class="list-group">
    3.  
      <a href="{{ url('/') }}" class="list-group-item active">学生列表</a>
    4.  
      <a href="{{ url('student/create') }}" class="list-group-item">新增学生</a>
    5.  
      </div>
    6.  
      </div>
    7.  
       

    esourcesviewssharedmessage.blade.php

    1.  
      <divclass="alert alert-danger">
    2.  
      <ul>
    3.  
      <li>姓名不能为空</li>
    4.  
      <li>年龄只能为整数</li>
    5.  
      <li>请选择性别</li>
    6.  
      </ul>
    7.  
      </div>

    esourcesviewsstudentcreate.blade.php

    1.  
      @extends('layout/student')
    2.  
       
    3.  
      @section('content')
    4.  
      <!-- 所有的错误提示 -->
    5.  
      @include('shared/message')
    6.  
      <!-- 自定义内容区域 -->
    7.  
      <divclass="panel panel-default">
    8.  
      <divclass="panel-heading">新增学生</div>
    9.  
      <divclass="panel-body">
    10.  
      <formclass="form-horizontal">
    11.  
      <divclass="form-group">
    12.  
      <labelfor="name"class="col-sm-2 control-label">姓名</label>
    13.  
       
    14.  
      <divclass="col-sm-5">
    15.  
      <inputtype="text"class="form-control"id="name"placeholder="请输入学生姓名">
    16.  
      </div>
    17.  
      <divclass="col-sm-5">
    18.  
      <pclass="form-control-static text-danger">姓名不能为空</p>
    19.  
      </div>
    20.  
      </div>
    21.  
      <divclass="form-group">
    22.  
      <labelfor="age"class="col-sm-2 control-label">年龄</label>
    23.  
       
    24.  
      <divclass="col-sm-5">
    25.  
      <inputtype="text"class="form-control"id="age"placeholder="请输入学生年龄">
    26.  
      </div>
    27.  
      <divclass="col-sm-5">
    28.  
      <pclass="form-control-static text-danger">年龄只能为整数</p>
    29.  
      </div>
    30.  
      </div>
    31.  
      <divclass="form-group">
    32.  
      <labelclass="col-sm-2 control-label">性别</label>
    33.  
       
    34.  
      <divclass="col-sm-5">
    35.  
      <labelclass="radio-inline">
    36.  
      <inputtype="radio"name="sex"value="option1"> 未知
    37.  
      </label>
    38.  
      <labelclass="radio-inline">
    39.  
      <inputtype="radio"name="sex"value="option2">
    40.  
      </label>
    41.  
      <labelclass="radio-inline">
    42.  
      <inputtype="radio"name="sex"value="option3">
    43.  
      </label>
    44.  
      </div>
    45.  
      <divclass="col-sm-5">
    46.  
      <pclass="form-control-static text-danger">请选择性别</p>
    47.  
      </div>
    48.  
      </div>
    49.  
      <divclass="form-group">
    50.  
      <divclass="col-sm-offset-2 col-sm-10">
    51.  
      <buttontype="submit"class="btn btn-primary">提交</button>
    52.  
      </div>
    53.  
      </div>
    54.  
      </form>
    55.  
      </div>
    56.  
      </div>
    57.  
      @endsection

    appHttpControllersStudentController.php

    1.  
      /**
    2.  
      * 新增表单页面,表单提交到当前页
    3.  
      *
    4.  
      * @param
    5.  
      * @return void
    6.  
      * @author webjust [604854119@qq.com]
    7.  
      */
    8.  
      public functioncreate()
    9.  
      {
    10.  
      return view('student/create');
    11.  
      }

    appHttp outes.php

    1.  
      Route::get('/', ['uses' => 'StudentController@index']);
    2.  
       
    3.  
      // 新增表单路由
    4.  
      Route::any('student/create', ['uses' => 'StudentController@create']);

    添加hover效果。 esourcesviewssharedsiderbar.blade.php

    1.  
      <div class="col-md-3">
    2.  
      <div class="list-group">
    3.  
      <a href="{{ url('/') }}"
    4.  
      class="list-group-item {{ Request::path() == '/' ? 'active' : '' }}">学生列表</a>
    5.  
      <a href="{{ url('student/create') }}"
    6.  
      class="list-group-item {{ Request::path() == 'student/create' ? 'active' : '' }}">新增学生</a>
    7.  
      </div>
    8.  
      </div>
    9.  
       

    这里使用了 Request::path() 方法,更多Request facade 方法可以查看手册:https://cs.laravel-china.org/#requests

    4.2 通过模型实现新增

    给form表单添加action:

    <form class="form-horizontal" method="post" action="{{ url('student/create') }}">
    

    appHttpControllersStudentController.php

    1.  
      public functioncreate(Request $request)
    2.  
      {
    3.  
      // 判断是POST请求,也就是提交表单时走这个区间
    4.  
      if($request->isMethod('POST'))
    5.  
      {
    6.  
      echo "post";
    7.  
      }
    8.  
       
    9.  
      return view('student/create');
    10.  
      }

    此时会报 TokenMismatchException in VerifyCsrfToken.php line 67: 的错误。

    Laravel 提供简单的方法保护你的应用程序不受到 跨网站请求伪造 攻击。跨网站请求伪造是一种恶意的攻击,破坏份子伪造 已通过身份检验的用户身份 来运行未经授权的命令。
    Laravel 会自动生成一个 CSRF token 给每个用户的 Session。该 token 用来验证用户是否为实际发出请求的用户。可以使用 csrf_field 辅助函数来生成一个包含 CSRF token 的 _token 隐藏表单字段。
    

    更多查看:http://d.laravel-china.org/docs/5.2/routing#csrf-protection

    在Blade模板引擎中使用:

    {{ csrf_field() }}
    

    修改 input 字段的属性:name="Student[name]" 这样可以获得一个数组下标以模型名命名的数组。

    esourcesviewsstudentcreate.blade.php

    1.  
      <form class="form-horizontal" method="post" action="{{ url('student/create') }}">
    2.  
      {{ csrf_field() }}
    3.  
      <div class="form-group">
    4.  
      <label for="name" class="col-sm-2 control-label">姓名</label>
    5.  
       
    6.  
      <div class="col-sm-5">
    7.  
      <input type="text" name="Student[name]" class="form-control" id="name" placeholder="请输入学生姓名">
    8.  
      </div>
    9.  
      <div class="col-sm-5">
    10.  
      <p class="form-control-static text-danger">姓名不能为空</p>
    11.  
      </div>
    12.  
      </div>
    13.  
      <div class="form-group">
    14.  
      <label for="age" class="col-sm-2 control-label">年龄</label>
    15.  
       
    16.  
      <div class="col-sm-5">
    17.  
      <input type="text" name="Student[age]" class="form-control" id="age" placeholder="请输入学生年龄">
    18.  
      </div>
    19.  
      <div class="col-sm-5">
    20.  
      <p class="form-control-static text-danger">年龄只能为整数</p>
    21.  
      </div>
    22.  
      </div>
    23.  
      <div class="form-group">
    24.  
      <label class="col-sm-2 control-label">性别</label>
    25.  
       
    26.  
      <div class="col-sm-5">
    27.  
      <label class="radio-inline">
    28.  
      <input type="radio" name="Student[sex]" value="2"> 未知
    29.  
      </label>
    30.  
      <label class="radio-inline">
    31.  
      <input type="radio" name="Student[sex]" value="1"> 男
    32.  
      </label>
    33.  
      <label class="radio-inline">
    34.  
      <input type="radio" name="Student[sex]" value="0"> 女
    35.  
      </label>
    36.  
      </div>
    37.  
      <div class="col-sm-5">
    38.  
      <p class="form-control-static text-danger">请选择性别</p>
    39.  
      </div>
    40.  
      </div>
    41.  
      <div class="form-group">
    42.  
      <div class="col-sm-offset-2 col-sm-10">
    43.  
      <button type="submit" class="btn btn-primary">提交</button>
    44.  
      </div>
    45.  
      </div>
    46.  
      </form>

    修改:appHttpControllersStudentController.php

    1.  
      public functioncreate(Request $request)
    2.  
      {
    3.  
      // 判断是POST请求,也就是提交表单时走这个区间
    4.  
      if($request->isMethod('POST'))
    5.  
      {
    6.  
      $data = $request->input('Student');
    7.  
      var_dump($data);
    8.  
      }
    9.  
       
    10.  
      return view('student/create');
    11.  
      }

    访问:http://example.com/student/create 提交表单,效果:

    实现模型的添加操作:

    1.  
      // 判断是POST请求,也就是提交表单时走这个区间
    2.  
      if($request->isMethod('POST'))
    3.  
      {
    4.  
      $data = $request->input('Student');
    5.  
      // var_dump($data);
    6.  
      $data['created_time'] = time();
    7.  
      $data['updated_time'] = time();
    8.  
       
    9.  
      // 模型的添加方法
    10.  
      $ret = Student::insert($data);
    11.  
      var_dump($ret);
    12.  
      }

    添加数据测试,查询数据库,可以看到新增加了1条记录哦!(^__^) 嘻嘻……

    使用重定向方法:redirect()

    1.  
      public functioncreate(Request $request)
    2.  
      {
    3.  
      // 判断是POST请求,也就是提交表单时走这个区间
    4.  
      if($request->isMethod('POST'))
    5.  
      {
    6.  
      $data = $request->input('Student');
    7.  
      // var_dump($data);
    8.  
      $data['created_time'] = time();
    9.  
      $data['updated_time'] = time();
    10.  
       
    11.  
      // 模型的添加方法
    12.  
      $ret = Student::insert($data);
    13.  
      if($ret)
    14.  
      {
    15.  
      return redirect('/');
    16.  
      } else{
    17.  
      return redirect('student/create');
    18.  
      }
    19.  
      }
    20.  
       
    21.  
      return view('student/create');
    22.  
      }

    4.3 操作状态提示

    重定向并加上 Session 闪存数据

    通常重定向至新的 URL 时会一并 写入闪存数据至 session。所以为了方便,你可以利用链式调用的方式创建一个 RedirectResponse 的实例 并 闪存数据至 Session。这对于在一个动作之后保存状态消息相当方便:

    return redirect('/')->with('success', '操作成功!');
    

    当然,在用户重定向至新的页面后,你可以获取并显示 session 的闪存数据。举个例子,使用 Blade 的语法:

    1.  
      @if (session('success'))
    2.  
      <div class="alertalert-success">
    3.  
      {{ session('success') }}
    4.  
      </div>
    5.  
      @endif

    修改如下:

    1.  
      // 模型的添加方法
    2.  
      $ret = Student::insert($data);
    3.  
      if($ret)
    4.  
      {
    5.  
      return redirect('/')->with('success', '添加成功!');
    6.  
      } else{
    7.  
      return redirect('student/create')->with('error', '添加失败!');
    8.  
      }

    esourcesviewssharedsuccess.blade.php

    1.  
      @if(Session::has('success'))
    2.  
      <!-- 成功提示框 -->
    3.  
      <divclass="alert alert-success alert-dismissible"role="alert">
    4.  
      <buttontype="button"class="close"data-dismiss="alert"aria-label="Close">
    5.  
      <spanaria-hidden="true">&times;</span>
    6.  
      </button>
    7.  
      <strong>成功!</strong> {{Session::get('success')}}
    8.  
      </div>
    9.  
      @endif
    10.  
       
    11.  
      @if(Session::has('error'))
    12.  
      <!-- 失败提示框 -->
    13.  
      <divclass="alert alert-danger alert-dismissible"role="alert">
    14.  
      <buttontype="button"class="close"data-dismiss="alert"aria-label="Close">
    15.  
      <spanaria-hidden="true">&times;</span>
    16.  
      </button>
    17.  
      <strong>失败!</strong> {{Session::get('error')}}
    18.  
      </div>
    19.  
      @endif
    20.  
       

    同理,我们也可以使用 Session类的方法。如:

    1.  
      @if(Session::has('success'))
    2.  
      {{Session::get('success')}}

    为了显示最新添加的数据,我们采用倒序的排列方式:

    1.  
      public functionindex()
    2.  
      {
    3.  
      // 对 Eloquent 模型进行分页
    4.  
      $students = Student::orderby('id', 'desc')->paginate(5);
    5.  
       
    6.  
      // 渲染 student/index 视图,并传递查询出来的全部数据
    7.  
      return view('student/index', ['students' => $students]);
    8.  
      }

    最终效果如下:

     

  • 相关阅读:
    Key-Value Memory Network
    Deep Mask Memory Network with Semantic Dependency and Context Moment for Aspect Level Sentiment Clas
    Deep Memory Network在Aspect Based Sentiment方向上的应用
    Deep Memory Network 深度记忆网络
    Self Attention 自注意力机制
    Attention基本公式及其变种
    *端策略优化算法(PPO)
    Policy Gradient 算法
    一本通 农场派对
    A
  • 原文地址:https://www.cnblogs.com/yszr/p/10256596.html
Copyright © 2011-2022 走看看