<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之旅 廣告
                [TOC] ## 說在前面 MVC模式下我們通常第一時間就在控制器的方法里寫代碼,在Yii里將這個寫代碼的地方定義了一個叫`Action`的概念,比如下面就有2個Action: ~~~php class UserController extends \yii\web\Controller{ public function actionRegister(){ //注冊處理 } public function actionLogin(){ //登錄處理 } } ~~~ 我們日常交流中就說“這個控制器里有2個方法分別處理注冊和登錄業務”,在Yii里應該說“這個控制器里有2個Action……” 方法就方法,干嘛要套個別的名頭上去?且看下面 * * * ## Action映射 先定義一個類繼承[yii\\base\\Action](http://www.yiichina.com/doc/api/2.0/yii-base-action): ~~~php namespace app\actions; class Login extends \yii\base\Action{ public function run(){ echo '登錄處理'; } } ~~~ 然后控制器可以這樣: ~~~php class UserController extends \yii\web\Controller{ //這個方法是重點!!!! public function actions(){ return [ //將login映射到指定的類 'login' => 'app\actions\Login' ]; } public function actionRegister(){ //注冊處理 } } ~~~ 此時看上去只有`?r=user/register`能訪問到actionRegister方法 但實際上`?r=user/login`也能訪問,它會執行**app\\actions\\Login::run**,因為控制器的`actions`方法進行了actionID映射,它里面的意思是說:如果收到請求的actionID是`login`的話,那就大概這樣: ~~~php $action = new \app\actions\Login(); $action->run(); ~~~ 這樣就實現了將login邏輯剝離到一個獨立的類里處理了,而且這個類還能被別的地方重用 假如登錄邏輯的代碼很長很復雜,寫在這個Controller那加上別的業務代碼量就會變得很大,我們可以嘗試這樣封裝一下,我個人曾經也遇到過這樣的項目,登錄邏輯很復雜很長,而且登錄后又要做一些事情 * * * ## 訪問控制器 如果有多個控制器都定義了`actions`方法來映射到同一個Action類,那這個Action怎么知道是哪個控制器調用了自己呢?那就是`$this->controller`屬性: ~~~php echo $this->controller->id; var_dump($this->controller); ~~~ * * * ## 訪問actionId `$this->id` * * * ## 返回值 將業務邏輯封裝到獨立的Action中后,這個Action處理完業務要返回數據給前端時,做法跟平時控制器的方法是一模一樣的,比如`return 123`或`return $this->controller->render('login')`或renderPartial等都行 * * * ## 屬性注入 其實actions方法進行映射時也能進行屬性注入,比如一個Action定義了$a、$b屬性,那映射時可以這么來: ~~~php public function actions(){ return [ 'login' => [ //變成了數組 'class' => 'app\actions\Login', 'a' => 'value a', 'b' => 'value b', ] ]; } ~~~ 這樣如果有多個控制器都將各自的請求映射給同一個Action時,但各個控制器的actions方法可以注入不同的屬性值,以此來讓這個Action能依據不同的屬性值來進行不同的工作邏輯控制 **實際上這種需求很少,首先定義成獨立Action的需求就很更少**,所以這個只要知道一下就好 * * * ## 好了,那為何叫Action 簡單地說,如果將login方法定義成了一個獨立的類(如上面的app\\actions\\Login),那這個類已經不能說它是控制器的login方法了 而是login業務通過一個類的邏輯來實現了而已,這個邏輯體叫什么呢,于是官方就起名為Action(行動)
                  <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>

                              哎呀哎呀视频在线观看