<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 第5節 Laravel-表單驗證及數據保持詳解 # 5.1 表單校驗 5.2 顯示失敗信息 5.3 表單校驗信息轉化成中文 5.4 表單信息保持 ### 5.1 表單校驗 ### 檢查應用程序的基底控制器 (App\Http\Controllers\Controller) 類你會看到這個類使用了 ValidatesRequests trait。這個 trait 在你所有的控制器里提供了方便的 validate 驗證方法。 validate 方法會接收 HTTP 傳入的請求以及驗證的規則。如果驗證通過,你的代碼就可以正常的運行。若驗證失敗,則會拋出異常錯誤消息并自動將其返回給用戶。在一般的 HTTP 請求下,都會生成一個重定向響應,對于 AJAX 請求則會發送 JSON 響應。 `\vendor\laravel\framework\src\Illuminate\Foundation\Validation\ValidatesRequests.php` public function validate(Request $request, array $rules, array $messages = [], array $customAttributes = []) { $validator = $this->getValidationFactory()->make($request->all(), $rules, $messages, $customAttributes); if ($validator->fails()) { $this->throwValidationException($request, $validator); } } 了解了表單驗證的原理,那接下來我們就使用控制器自帶的 validate 方法進行校驗吧! 首先,通過表單,我們了解到需要校驗的字段包括了:name, age, sex `\app\Http\Controllers\StudentController.php` public function create(Request $request) { // 判斷是POST請求,也就是提交表單時走這個區間 if($request->isMethod('POST')) { // 校驗 $this->validate($request, [ 'Student.name' => 'required|min:2|max:20', 'Student.age' => 'required|integer', 'Student.sex' => 'required|integer', ]); ... 此時,我們嘗試提交表單(注意:此處可以不填寫任何內容),發現無法提交成功。因為當驗證無法通過時,程序會拋出異常,不往下執行。 ### 5.2 顯示失敗信息 ### 好了,接下來我們就讓表單的驗證信息輸出吧!之前,我們表單上的失敗信息,就該派上用場了! GO!!!!!!!!!!!!!1 <blockquote class="info"> 顯示驗證錯誤原理:如果本次請求的參數未通過我們指定的驗證規則呢?正如前面所提到的,Laravel 會自動把用戶重定向到先前的位置。另外,所有的驗證錯誤會被自動 閃存至 session。請注意我們并不需要在 GET 路由中明確的將錯誤消息綁定到視圖上。這是因為 Laravel 會自動檢查 session 內的錯誤數據,如果錯誤存在的話,它會自動將這些錯誤消息綁定到視圖上。因此需要的注意一點是 $errors 變量在每次請求的所有視圖中都可以被使用,你可以很方便的假設 $errors 變量已被定義且進行安全地使用。$errors 變量是 Illuminate\Support\MessageBag 的實例。 </blockquote> > 出處:<http://d.laravel-china.org/docs/5.2/validation#validation-quickstart> `\resources\views\shared\message.blade.php` @if(count($errors) > 0) <div class="alert alert-danger"> <ul> @foreach($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif 顯示效果: ![](https://box.kancloud.cn/dc48bc108d61b12201a842f262b67272_1046x728.png) ### 5.3 表單校驗信息轉化成中文 ### 校驗方法如下: // 校驗 $this->validate($request, [ 'Student.name' => 'required|min:2|max:20', 'Student.age' => 'required|integer', 'Student.sex' => 'required|integer', ],[ 'required' => ':attribute 為必填項', 'min' => ':attribute 長度不能小于2個字符', 'max' => ':attribute 長度不能大于20個字符', 'integer' => ':attribute 必須為數字', ],[ 'Student.name' => '用戶名', 'Student.age' => '年齡', 'Student.sex' => '性別', ]); 視圖文件,使用 `{{ $errors->first('Student.name') }}` 可以只顯示第一條錯誤信息: ~~~ <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">{{ $errors->first('Student.name') }}</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">{{ $errors->first('Student.age') }}</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">{{ $errors->first('Student.sex') }}</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> ~~~ 此時表單提交的功能就完成大半啦,但是不能夠保存上一次輸入的信息,還是不夠完美!那下一步就完善一下。 ### 5.4 表單信息保持 ### 閃存輸入數據至 Session 后重定向。 你可能需要將輸入數據閃存并重定向至前一頁,這時只要在重定向方法后加上 withInput 即可。 // 模型的添加方法 $ret = Student::insert($data); if($ret) { return redirect('/')->with('success', '添加成功!')->withInput(); } else{ return redirect('student/create')->with('error', '添加失敗!')->withInput(); } 在表單的標簽上加上 `value` 屬性值。如 `{{ old('Student')['name'] }}` ~~~ <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" value="{{ old('Student')['name'] }}" name="Student[name]" class="form-control" id="name" placeholder="請輸入學生姓名"> </div> <div class="col-sm-5"> <p class="form-control-static text-danger">{{ $errors->first('Student.name') }}</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" value="{{ old('Student')['age'] }}" name="Student[age]" class="form-control" id="age" placeholder="請輸入學生年齡"> </div> <div class="col-sm-5"> <p class="form-control-static text-danger">{{ $errors->first('Student.age') }}</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]" {{ (isset(old('Student')['sex']) && old('Student')['sex'] == '2') ? 'checked' : '' }} value="2"> 未知 </label> <label class="radio-inline"> <input type="radio" name="Student[sex]" {{ (isset(old('Student')['sex']) && old('Student')['sex'] == '1') ? 'checked' : '' }} value="1"> 男 </label> <label class="radio-inline"> <input type="radio" name="Student[sex]" {{ (isset(old('Student')['sex']) && old('Student')['sex'] == '0') ? 'checked' : '' }} value="0"> 女 </label> </div> <div class="col-sm-5"> <p class="form-control-static text-danger">{{ $errors->first('Student.sex') }}</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> ~~~ 效果如圖: ![](https://box.kancloud.cn/17ee9199d7d15e06de85f2f2c6f94400_1046x728.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看