<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>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 升級框架 請運行 `composer update` 升級框架至最新的安全版本. ## 中間件攔截 在上一章因為中間件失效,我們采用了最原始也是最啰嗦的方法判斷用戶狀態,升級版本之后則可以正常使用中間件. 之前判斷的方式: ~~~~ php if (SessionFacade::has('user')) ~~~~ 現在創建一個新的中間件,鍵入命令: ~~~~ shell php think make:middleware Auth ~~~~ 打開新建好的中間件文件 `application/http/middleware/Auth.php` 并寫入: ~~~~ php public function handle($request, \Closure $next) { return $next($request); } ~~~~ `return $next($request);` 表示返回一個 `response` 對象,可以理解為進行下一步的操作. 如果我們想往控制器內傳參,則只需要編寫: ~~~~ php public function handle($request, \Closure $next) { $request->hello = 'ThinkPHP'; return $next($request); } ~~~~ 然后在控制器內調用: ~~~~ php public function index(Request $request) { return $request->hello; // ThinkPHP } ~~~~ 當然了,本節是要管理用戶的狀態,所以請刪除前面的代碼,并寫入: ~~~~ php if (session('?user')) { return $next($request); } else { redirect('user/session/create')->with('validate', '請先登錄'); } ~~~~ 上面代碼是標準的流程控制語句,你也可以寫成三元運算的方式: ~~~~ php return session('?user') ? $next($request) : redirect('user/session/create')->with('validate', '請先登錄'); ~~~~ 這兩段代碼作用相同,以讀者喜好為準. 請注意,`session()` 方法是 ThinkPHP 框架的助手函數,詳細文檔請查看: http://www.hmoore.net/manual/thinkphp5_1/354117 在本段代碼中,`session('?user') 與 Session::has('user')` 等效,`session('user') 與 Session::get('user')` 等效 ## 使用中間件 打開 `application/user/controller/Session.php`: ~~~~ php class Session extends Controller { protected $middleware = [ 'Auth' => [ 'except' => [ 'create', 'save' ] ], ]; ~~~~ `protected $middleware` 則是初始化一個中間件,而 `except` 方法表示,當前控制器下有哪些方法是不使用中間件的. 然后看到 `public function create()` 并修改為: ~~~~ php public function create() { return $this->fetch(); } ~~~~ 可以對比之前的代碼,我們刪除了`如果用戶登錄則自動跳轉` 以及 `token` 輸出,后續操作下面再進行說明. 再看到 `public function delete($id)` 修改: ~~~~ php public function delete($id) { session('user', null); return redirect('user/session/create')->with('validate', '您已退出'); } ~~~~ 可以看到,使用中間件之后,代碼干凈了很多. 再打開 `application/user/controller/Auth.php`: ~~~~ php class Auth extends Controller { protected $middleware = [ 'Auth' => [ 'except' => [ 'create', 'save' ] ], ]; public function create() { return $this->fetch(); } public function read($id) { $user = User::find($id); $this->assign([ 'user' => $user, ]); return $this->fetch(); } ~~~~ 基本的中間件已經使用了,但是現在不管訪問什么鏈接,都會跳出 `未定義變量: token ` 的錯誤,現在來編寫前端頁面 `resources/views/_layout/header.blade.php`: ~~~~ html <div class="dropdown-menu" aria-labelledby="dropdownMenuButton"> <a class="dropdown-item" href="{{ url('user/auth/read', ['id' => session('user.id')]) }}">個人主頁</a> <a class="dropdown-item"> <form action="{{ url('user/session/delete', ['id' => session('user.id')]) }}" method="POST"> @php echo token() @endphp <button class="btn btn-block" type="submit" name="button">退出</button> </form> </a> </div> ~~~~ 可以看到,我們將原先的: `<input type="hidden" name="__token__" value="{{ $token }}" />` 修改為了: `@php echo token() @endphp` `token()` 方法是框架自帶的 `token` 生成方式. 同樣的,全局查找: `<input type="hidden" name="__token__" value="{{ $token }}" />` 并且替換為: `@php echo token() @endphp` 現在 token 輸出的問題解決了,還有一項,在用戶以及登錄的情況下,進入登錄/注冊頁面都會顯示輸入框,我們再來進行優化 打開 `resources/views/user/session/create.blade.php` 和 `resources/views/user/auth/create.blade.php`: ~~~~ html ...... @if(session('validate')) <div class="alert alert-warning" role="alert"> {{ session('validate') }} </div> @endif @if(session('user')) <div class="alert alert-success" role="alert"> 您已登入賬戶: {{ session('user')->name }} </div> @endif ~~~~ 現在,在登錄的狀態下訪問 `http://thinkphp.test/user/session/create.html` 看到綠色的已登錄提示框.
                  <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>

                              哎呀哎呀视频在线观看