<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 功能強大 支持多語言、二開方便! 廣告
                # 使用資源路由及控制器 修改路由路徑 `route\route.php`: ~~~~ php ~Route::get('/signup', 'user/auth/create');~ Route::resource('auth', 'user/auth'); ~~~~ 在 ThinkPHP 的資源路由解析中,以上語句表示注冊了一個名稱為 `auth` 的資源路由到 `user` 模塊的 `auth` 控制器,實際注冊的路徑就是 `application\user\controller\Auth.php`. 打開 `Auth` 控制器 `application\user\controller\Auth.php`,在之前的章節中我們已經使用 `Think` 命令行來創建了一個資源控制器,可以看到系統為我們自動生成了 7個 模塊,其中包括: 標識 | 請求類型 | 生成路由規則 | 對應操作方法(默認) ------------ | ------------- | ------------- | ------------- index | GET | auth | index create | GET | auth/create | create save | POST | auth | save read | GET | auth/:id | read edit | GET | auth/:id/edit | edit update | PUT | auth/:id | update delete | DELETE | auth/:id | delete 可以看到,我們在表單注冊頁面的 `URL`路徑是 `http://thinkphp.test/user/auth/create.html`. 在 6.2 章節中我們寫入的 HTML 代碼 `<form method="POST" action="{{ url('save') }}">` 其中 `url('save')` 就是對應上面路由規則的 `save` 方法,也就是在 `auth` 控制器中的 `public function save(Request $request)`. 在 `save` 方法下添加: ~~~~ php public function save(Request $request) { dump($request->post()); } ~~~~ `$request` 是 ThinkPHP 提供的一個請求方法: http://www.hmoore.net/manual/thinkphp5_1/353985 ,用于獲取所有發送至當前控制器的方法/值. 而這一段 `save(Request $request)` 則是通過 `依賴注入` 將 `use think\Request;` 注入到此控制器. ## 依賴注入 > 依賴注入其實本質上是指對類的依賴通過構造器完成自動注入,例如在控制器架構方法和操作方法中一旦對參數進行對象類型約束則會自動觸發依賴注入,由于訪問控制器的參數都來自于 `URL` 請求,普通變量就是通過參數綁定自動獲取,對象變量則是通過依賴注入生成. http://www.hmoore.net/manual/thinkphp5_1/353958 依賴注入與控制反轉相輔相成,大多數面向對象的編程語言,在調用一個類時都需要先進行實例化 `$class = new class()` 生成一個對象,那么當我們在一個 `function` 中使用 `class()` 類的方法則需要: ~~~~ php class x{ a = new b() } ~~~~ 如果要傳遞參數,則要改為: ~~~~ php class x{ a = new b(param) } ~~~~ 如果我們有一個對 `class b` 的改動,那么我們在 `class x` 當中也需要對之修改,這就是 `x` 對 `b` 的依賴,例如現在 `class b` 將接收至少兩個參數,在 `class x` 當中我們就要修改為: ~~~~ php class x{ a = new b(param1, param1) } ~~~~ 就要分別修改兩次,這樣的傳遞參數是高度耦合的,在一個中大型項目中這樣的依賴可能多大幾十個,如果一個依賴的構造改變,那么其余的幾十個也要隨之修改,這樣的工程繁瑣且易錯,程序也會極難維護,要解決這個問題,就出現了 `控制反轉` 的思想,把 `class b` 從 `class x` 中抽離出來,交給第三方的構造器去控制依賴,ThinkPHP 使用的是: http://www.hmoore.net/manual/thinkphp5_1/353958, 通過 `構造函數,工廠模式` 等方法,注入到 `class b`,這樣就進行了解耦. ## 提交表單 我們在 6.2 創建的表單上隨意填寫些字符,并提交,則會出現: ~~~~ array array (size=5) '__token__' => string '7831e09189d70586bd3145bb486ea556e1f9dd4b' (length=40) 'name' => string 'test' (length=4) 'email' => string 'test@test' (length=9) 'password' => string 'test' (length=4) 'password_confirmation' => string 'test' (length=4) ~~~~ 可以看到, `$request` 方法已經能夠獲取到從前端應用發送過來的值,現在再修改控制器: ~~~~ php public function save(Request $request) { dump($request->name); } ~~~~ `$request->name` 就是獲取提交表單中 `<input type="text" class="form-control" name="name">` `name` 字段的值,也是上面打印出來的 `'name' => string 'test' (length=4)` 的值. ## 創建驗證器 在控制臺中鍵入 `php think make:validate user/Auth` 會創建 `application\user\validate\Auth.php`,打開此文件并鍵入: ~~~~ php protected $rule = [ '__token__' => 'token', 'name|名字' => 'require|max:50', 'email|郵件' => 'require|email|unique:users|max:255', 'password|密碼' => 'require|confirm|min:6' ]; ~~~~ 在驗證規則中, `name|名字(驗證字段|別名)`,別名的作用是在驗證出錯之后會發送 `別名+錯誤信息`,在未設置別名之前,錯誤信息會輸出 `name 不能為空`,而設置之后則會輸出 `名字不能為空`. `unique:users` 則是值在 users 表里唯一字段,不得重復, `confirm` 將會自動對比 `密碼(name="password")` `確認密碼(name="password_confirm")` 字段的值,更多內置的驗證規則請查看: http://www.hmoore.net/manual/thinkphp5_1/354107 ## 設置驗證器 打開控制器 `application\user\controller\Auth.php` 并修改: ~~~~ php public function save(Request $request) { $requestData = $request->post(); $result = $this->validate($requestData, 'app\user\validate\Auth'); if (true !== $result) { dump($result); } else { dump($requestData); } } ~~~~ `validate($requestData, 'app\user\validate\Auth')` 的前部分表示傳入的值,后半部分表示要使用的驗證器. 現在在重新返回前端頁面進行嘗試提交不同的表單,則可以看到傳入值正確/錯誤而返回的不同提示/值.
                  <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>

                              哎呀哎呀视频在线观看