1. 程式人生 > >Laravel小專案之第4節 Laravel-通過表單實現新增及操作狀態提示功能

Laravel小專案之第4節 Laravel-通過表單實現新增及操作狀態提示功能

第4節 Laravel-通過表單實現新增及操作狀態提示功能
4.1 顯示新增表單檢視
4.2 通過模型實現新增
4.3 操作狀態提示
4.1 顯示新增表單檢視
修改邊欄的連結

\resources\views\shared\siderbar.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> \resources\views\shared\message.blade.php <div class="alert alert-danger"> <ul> <li>姓名不能為空</li> <li>年齡只能為整數</li> <li>請選擇性別</li> </ul> </div> \resources\views\student\create
.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 \app\Http\Controllers\StudentController.php /** * 新增表單頁面,表單提交到當前頁 * * @param * @return void * @author webjust [[email protected]] */ public function create() { return view('student/create'); } \app\Http\routes.php Route::get('/', ['uses' => '[email protected]']); // 新增表單路由 Route::any('student/create', ['uses' => '[email protected]']); 新增hover效果。\resources\views\shared\siderbar.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') }}"> \app\Http\Controllers\StudentController.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]" 這樣可以獲得一個數組下標以模型名命名的陣列。 \resources\views\student\create.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> 修改:\app\Http\Controllers\StudentController.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', '新增失敗!'); } \resources\views\shared\success.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 顯示新增表單檢視

修改邊欄的連結

\resources\views\shared\siderbar.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.    

\resources\views\shared\message.blade.php

  1.   <divclass="alert alert-danger">
  2.   <ul>
  3.   <li>姓名不能為空 </li>
  4.   <li>年齡只能為整數 </li>
  5.   <li>請選擇性別 </li>
  6.   </ul>
  7.   </div>

\resources\views\student\create.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.  

    相關推薦

    Laravel專案4 Laravel-通過實現新增操作狀態提示功能

    第4節 Laravel-通過表單實現新增及操作狀態提示功能 4.1 顯示新增表單檢視 4.2 通過模型實現新增 4.3 操作狀態提示 4.1 顯示新增表單檢視 修改邊欄的連結 \resources\views\shared\siderbar.blade.php <div class="col-

    Laravel專案7 Laravel-通過實現修改

    第7節 Laravel-通過表單實現修改 7.1 給HTML新增連結 7.2 建立修改的表單頁面 7.3 使用模型實現修改操作 7.1 給HTML新增連結 在 \resources\views\student\index.blade.php 中給修改新增 href 屬性。 <a href="{{ u

    Laravel專案1 Laravel-案例演示

    1.1 案例展示 1.2 安裝Laravel 1.1 案例展示 使用者列表頁:分頁元件 新增使用者表單: 表單驗證資訊: 訊息提醒: 詳情頁: 修改、刪除: 1.2 安裝Laravel 5.2: composer create-project --prefer

    易學筆記-4:redis型別Hash

    redis型別之Hash 設定Hash值 127.0.0.1:6379> HMSET runoobkey name "redis tutorial" description "redis basic commands for caching" likes 20 visito

    0課4_剛接觸開發板使用vmwae和預先做好的ubuntu

     在Windows 編寫程式碼,查資料,寫完之後上傳到Linux伺服器, 在Linux裡編譯。在虛擬機器裡安裝VMware,VMware裝Linux。 4. 解壓使用製作好的ubuntu 4.1 自己下載安裝vmware 4.2 按開發板手冊解壓ubuntu 4.

    [微信程式開發]4專案配置檔案

    可以在專案根目錄使用 project.config.json 檔案對專案進行配置。 { "description": "專案配置檔案。", "packOptions": { "ignore": [] }, "

    3課—4

    原因 img 模式 應該 乘法表 制表符 logs blog 空格 循環嵌套: 練習3: 九九乘法表: 列的變化是依次遞增的,從1到2 從2 到3;行的變化也是從1到3,。所以y做內循環初始值為1,塔尖模式應該改變循環條件。 用"\t"(制表符)代替空格的

    《Java從小白到大牛精簡版》4章 Java語法基礎

    java javase 本章主要為大家介紹Java的一些基本語法,其中包括標識符、關鍵字、保留字、常量、變量、表達式等內容。4.1 標識符、關鍵字和保留字任何一種計算機語言都離不開標識符和關鍵字,因此下面將詳細介紹Java標識符、關鍵字和保留字。4.1.1 標識符標識符就是變量、常量、方法、枚舉、類、

    4:getters計算過濾操作

    maps pmu sets fun table 上傳 取數 們的 es6 上傳: 1、 assetsPublicPath: ‘./‘, 修改路徑 2、終端輸入 npm run build 命令 生成 dist 文件 3、把dist文件裏的冬冬上傳就可以了

    c# WF 4 窗體的事件

    div clas 技術分享 技術 .com C# 內容 info 找到 本節內容: 1:事件是什麽? 2:窗體事件在哪可以找到 3:事件有哪些 1:事件是什麽? 2:窗體事件在哪裏 第一種: 第二種: 3:事件有哪些

    4、排序實戰

    算法基礎 排序 習題 實戰 1、為什麽要實戰? 曾經有人問我,你寫代碼又快又好,是怎麽學的呀?其實我的水平也才一般般的啦,之所以能把程序寫出來,只有多練習。 看別人的算法,很快就看完了,但往往看完就忘記了,只有自己親自寫一遍,調試運行一邊,才能夠掌握。 在練習幾道題,舉一反三,才算是掌握,

    python學習感悟4

    bsp 函數和函數式編程 bubuko img info 學習感悟 技術 inf def 本節學習了函數和函數式編程 函數是為了將邏輯結構化和過程化。 定義函數的過程如下: 函數和過程均是用def定義,兩者均可調用,過程即為沒有返回值的函數。 x=func1() #調

    Python開發【4】【Python分支結構與循環結構】

    pid 變化 操作 年齡 當前 name () 執行順序 div 1、流程控制   流程: 計算機執行代碼的順序就是流程   流程控制: 對計算機代碼執行順序的管理就是流程控制   流程分類: 流程控制共分為3類: 順序結構 分支結構/選擇結構 循環結構 2、分

    開啟運維 4 篇——常見軟體安裝:JRE、MySQL、Tomcat安裝

    1、JRE安裝:在正式環境裡 我們可以不安裝jdk ,僅僅安裝Java執行環境 jre即可。 ①下載jre:JRE官網下載地址 開啟連結,勾選協議,下載Linux版本64位的 ②上傳jre到/home/data/下:使用FTP工具上傳。 如果上傳過程遇到下面的問題:連線到

    python爬蟲入門————————————————--使用bs4語法獲取資料

    1.裝備工作:模組安裝 1.1命令安裝方式:(開發環境:python3.6環境) 官方文件:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.html 官方文件中文版:https://www.crummy.com/

    步步詳解1----ALTERA FPGA關於PLL的使用,幫你用光所有PLL

    PLL 建立工程 建立新工程 引導說明,點選next 設定工程路徑,不能有中文;設定工程名稱,點選next 點選next 選擇器件庫,這裡選擇cyclone IV E,器件型號為EP4C6EE22C8,該器件有兩個PLL; 點選next 呼叫

    Android 專案--SQLite 使用法門

    package com.terry; import android.app.Activity; import android.database.Cursor; import android.database.sqlite.SQLiteCursor; import android.os.Bundle

    斯坦福CS193P 2017-2018 4課筆記

    以下內容為swift4.0中的特性 Struct 值型別(記憶體分配在棧上,賦值或者函式的引數傳遞時通過拷貝來實現) Copy-on-write: 通過寫時複製的方式提升記憶體的使用效率。在值需要改變的時候才執行拷貝操作。 Mutating: 使用mutating來標

    python全棧開發中級班全程筆記(第二模組、三章)4 :函式進階

    python全棧開發筆記第二模組 第三章4節:函式進階 一、函式進階 1、函式進階--名稱空間   名稱空間,又稱名稱空間,或名字空間,就是存放變數名的地方比如 n = 1 , 1是存在記憶體的,但n 這個名字和繫結關係就儲存在名稱空間   *名稱空間和作用域是有直接關係的,   &nb

    Netty原始碼分析1章(Netty啟動流程)---->4: 註冊多路複用

      第一章:Netty啟動流程   第四節:註冊多路複用   回顧下以上的小節, 我們知道了channel的的建立和初始化過程, 那麼channel是如何註冊到selector中的呢?我們繼續分析 回到上一小節的程式碼: final ChannelFuture