<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之旅 廣告
                # 創建表單 在前面的章節中,我們已經為用戶創建了一個 `resource` 路由。 ~~~php // route.php Route::resource('auth', 'user/auth'); ~~~ 所以我們只需要在對應的控制器上進行頁面輸出即可。 打開 `application\user\controller\Auth.php`: ~~~php /** * 顯示編輯資源表單頁. * * @param int $id * @return \think\Response */ public function edit($id) { $user_id = Session::get('user.id'); if ($user_id !== $id) { return redirect('user/auth/edit', ['id' => $user_id]); } $user = User::find($user_id); $this->assign([ 'user' => $user, ]); return $this->fetch(); } ~~~~ 可以看到 `edit` 方法代碼前三行中先檢驗了 id 是否是當然登入用戶的 id,如果不是,就跳轉到當然登入用戶的編輯頁面,需要注意的是,即使這樣進行了跳轉,也不是安全的。 然后進入 blade `resources\views\user\auth\read.blade.php`: ~~~html <div class="panel-heading mb-3"> <h4>歡迎您 {{ $user->name }}</h4> ++++ <a class="btn btn-primary" href="{{ url('user/auth/edit', ['id' => session('user.id')]) }}">編輯資料</a> ++++ </div> ~~~~ 這時候在用戶個人資料頁面就會出現 `編輯資料` 的按鈕了,不過此時點擊進去,會拋出模板文件不存在的錯誤,所以現在來創建模板。 新建 blade `resources\views\user\auth\edit.blade.php`: ~~~html @extends('_layout.default') @section('title', $user->name) @section('content') <div class="col-md-offset-2 col-md-8"> <div class="panel panel-default mt-5"> <div class="panel-heading mb-3"> <h4>編輯 {{ $user->name }} 的個人資料</h4> </div> @if(session('validate')) <div class="alert alert-warning" role="alert"> {{ session('validate') }} </div> @endif <div class="panel-body"> <form method="POST" action="{{ url('update', ['id' => $user->id]) }}"> @php echo token() @endphp <input type="hidden" name="_method" value="PUT" > <div class="input-group mb-3"> <div class="input-group-prepend"> <span class="input-group-text">用戶名</span> </div> <input type="text" class="form-control" placeholder="{{ $user->name }}" name="name"> </div> <button type="submit" class="btn btn-primary btn-block">更新</button> </form> </div> </div> </div> @stop ~~~~ 在上面這段代碼中,我們添加了一行 `<input type="hidden" name="_method" value="PUT" >`,其中,`value="PUT"` 表示偽裝請求類型。 因為我們是要更新用戶資料,所以對應控制器的 `update` 方法,可是在 HTML 標準里,FORM 只有 POST GET 兩種方法,所以采用 INPUT 里進行類型偽裝的方式,讓控制器識別出是更新的操作。 創建模板完成之后,刷新頁面,即可看見剛剛添加好的表單。 ## 接收數據 打開控制器 `application\user\controller\Auth.php`: ~~~php /** * 保存更新的資源 * * @param \think\Request $request * @param int $id * @return \think\Response */ public function update(Request $request, $id) { $name = $request->name; $user_id = Session::get('user.id'); if ($user_id !== $id) { return redirect('user/auth/edit', ['id' => $user_id])->with('validate', '非法操作'); } User::where('id', $user_id)->update(['name' => $name]); Session::set('user.name', $name); return redirect('user/auth/edit', ['id' => $user_id])->with('validate', '修改成功'); } ~~~ 這段代碼中,我們首先將 id 與登入用戶的 id 進行對比,以防止模擬表單請求來修改其他用戶。 其次,在數據庫更新賬戶名之后,使用 `session set` 重新設置用戶名,保證前端數據的一致性。 這時候,刷新頁面,在輸入框中隨意填寫一些字符,再點擊更新按鈕,頁面上就已經修改成功了。 ## 驗證數據 雖然我們現在已經實現了整個更新用戶資料的操作邏輯,但是還不算完,由于前端無法對提交數據進行任何限制,所以在后端要進行二次校驗。 鍵入命令 `php think make:validate app\user\validate\UpdateUser`,并打開剛剛創建好的文件: ~~~php protected $rule = [ '__token__' => 'token', 'name|名字' => 'require|max:50', ]; ~~~ 接著返回控制器 `application\user\controller\Auth.php`: ~~~php public function update(Request $request, $id) { $user_id = Session::get('user.id'); if ($user_id !== $id) { return redirect('user/auth/edit', ['id' => $user_id])->with('validate', '非法操作'); } $requestData = $request->put(); $result = $this->validate($requestData, 'app\user\validate\UpdateUser'); if (true !== $result) { return redirect('user/auth/edit', ['id' => $user_id])->with('validate', $result); } else { $name = $requestData['name']; User::where('id', $user_id)->update(['name' => $name]); Session::set('user.name', $name); return redirect('user/auth/edit', ['id' => $user_id])->with('validate', '修改成功'); } } ~~~ 可以看到這段代碼增加了驗證數據的步驟,驗證唯一 id -> 驗證提交數據,最后再進行數據庫更新,這樣才能提高后端的安全可靠性。 返回前端頁面,嘗試不填寫任何數據就直接提交,就會看到名字不能為空的警告了,屆時,整個更新流程已經書寫完畢。
                  <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>

                              哎呀哎呀视频在线观看