1. 程式人生 > >Yii - 控制器 controller

Yii - 控制器 controller

在yii 中 所有能被客戶端訪問的控制都應該繼承 yii\web\Controller;

<?php

namespace app\modules\TestModule\controllers;
use yii\base\Controller;

class IndexController extends Controller
{
    //指定佈局檢視,如果不指定,預設為main.php
    public $layout = 'customMain';

    //當訪問路徑沒有指定方法名時,預設執行actionIndex動作
    public $defaultAction
= 'index'; //當方法被例項化的時候,會呼叫這個方法 public function init() { //使用新的佈局檔案 $this->layout = '';//佈局名稱 } /** * 宣告一個能被客戶端訪問的方法 * 注意:action 是能夠被客戶端訪問方法的字首 只有加了這個字首才能被客戶端訪問 */ public function actionIndex() { } /** * 給請求的方法定義形參,形參就是從客戶端傳遞過來的資料,當然你也可以將資料裝入模型中 * htt[://host/index.php?r=TestModule/test/index1&age=22&name=譚勇 */
public function actionIndex1($name='',$age='') { } /** * 當請求的方法不存在的是否會在這個函式中返回陣列中尋求這個方法 */ public function actions() { return array( 'demo' => array( 'class' => 'app\modules\TestModule\actions\DemoAction', 'name'
=> '譚勇', 'age' => 22 ) ); } } ?>

針對上述DemoAction的實現。

namespace app\modules\TestModule\actions;

use yii\base\Action;

class DemoAction extends Action
{
    public $name;
    public $age;

    /**
     * @Override
     * 該方法會被預設訪問
     */
    public function run()
    {
        echo 'action is demo and name : ' . $this->name . '  and age : ' . $this->age;
    }
}

路由:
終端使用者通過所謂的路由尋找到動作,路由是包含以下部分的字串:

模型ID: 僅存在於控制器屬於非應用的模組;
控制器ID: 同應用(或同模組如果為模組下的控制器) 下唯一標識控制器的字串;
動作ID: 同控制器下唯一標識操作的字串。

路由使用如下格式:

ControllerID/ActionID

如果屬於模組下的控制器,使用如下格式:

ModuleID/ControllerID/ActionID