Azalea\Controller

Controller 控制器虛類

?? Controller 為抽象類,無法通過 new 方式實例化,由 Bootstrap 自動實例化,Azalea 中所有控制器必須繼承此類

路由分發規則


Azalea 根據路徑分隔符進行分割,規則與 Zend FrameworkCodeIgniter 類似,規則如下

/[folder/]controller/action/arg1/arg2/arg3...
  • folder 文件夾在 控制器目錄 下存在則 folder 有效,并把該文件夾作為 當前控制器目錄,否則 folder 為空;
  • controller 會在當前控制器目錄下查找 同名.php 文件,加載并自動實例化,默認控制器名在配置 ['dispatch']['default_controller'] 中設置;
  • action 會在當前的 控制器實例 中查找 同名 + 環境后綴public 方法,默認方法名在配置 ['dispatch']['default_action'] 中設置;
  • action 后的部分組成 arguments 數組
  • 范例
  • /
[
      'folder` => null,
      'controller' => 'default',
      'action' => 'index',
      'arguments' => [],
]
  • /foo
[
      'folder` => null,
      'controller' => 'foo',
      'action' => 'index',
      'arguments' => [],
]
  • /foo/bar
[
      'folder` => null,
      'controller' => 'foo',
      'action' => 'bar',
      'arguments' => [],
]
  • /foo/bar/a/b/c
[
      'folder` => null,
      'controller' => 'foo',
      'action' => 'bar',
      'arguments' => ['a', 'b', 'c'],
]

控制器類和控制器方法命名規則


  • controller 類名與控制器名相同并首字母大寫,若存在 folder,則再加上文件夾名作前綴并首字母大寫,并以 "Controller" 作為后綴,例如
class DefaultController extends Azalea\Controller {}
class AdminDefaultController extends Azalea\Controller {}  // folder 為 "admin"
  • action 環境后綴 會根據運行環境配置,若默認 "WEB",則后綴為 "Action",否則直接使用環境名作為后綴,如 "CLI""CRON" 等,例如
public function indexAction() {}  // 運行環境為 "WEB"
public function scheduleCLI() {}  // 運行環境為 "CLI"

控制器方法的返回值

控制器方法支持返回 2 種類型

  1. 字符串:Azalea 將直接輸出,常用于視圖渲染
  2. 數組/對象:Azalea 將進行 json_encode 后輸出,常用于接口或 Ajax 返回

Controller::__init <small>子類實現</small>


控制器初始化回調函數

void Controller::__init ( void )

?? 該方法若子類實現則 Bootstrap 會自動調用,常用于子類初始化

  • 參數

  • 返回值

  • 范例

protected function __init()
{
    if (date('h') < 12) {
      $this->title = '上午';
    } else {
      $this->title = '下午';
    }
}

Controller::__router <small>子類實現</small>


動態路由回調函數

array Controller::__router ( array $paths )

?? 該方法若子類實現則 Bootstrap 會自動調用

  • 參數
    $paths - 路徑參數數組,第一個元素是 action 控制器方法名,剩下的元素為 arguments 參數數組

  • 返回值
    新路由數組,若無返回或返回 null,則保留原路由
    Azalea 只會對返回的路由數組中 callback, actionarguments 進行處理,其它值將忽略
    callbackaction 必須為字符串,且優先處理 callback,該值表示分發到控制器內指定的函數名

  • 范例

protected function __router($paths)
{
    // 如路徑為 product/123456,123456 為商品 ID
    if (is_numeric($paths[0])) {
      return [
        'action' => 'view',  // 路由到 view
        'arguments' => [$paths[0]],  // 把 $paths[0] 作為路徑參數
      ];
    } else {
      return [
        'callback' => 'view',  // 路由到 $this->view 方法,不會加運行環境后綴
      ]
    }
}
// 目標 Action
public function viewAction($productId) {}
// 目標方法
public function view() {}

Controller::getRequest


獲取 Request 請求類

Request Controller::getRequest ( void )
  • 參數

  • 返回值
    請求類實例

  • 范例

$request = $this->getRequest();

Controller::getResponse


獲取 Response 響應類

Response Controller::getResponse ( void )
  • 參數

  • 返回值
    響應類實例

  • 范例

$response = $this->getResponse();

Controller::getSession


獲取 Session 會話類

Session Controller::getSession ( void )
  • 參數

  • 返回值
    會話類實例

  • 范例

$session = $this->getSession();

Controller::getModel


獲取模塊

Model Controller::getModel ( string $name )
  • 參數
    $name - 模塊名

  • 返回值
    模塊實例

  • 范例

$mysqlModel = $this->getModel('mysql');

Controller::loadModel


加載模塊文件

void Controller::loadModel ( string ...$name )
  • 參數
    $name - 模塊名,可傳入多個模塊名

  • 返回值

  • 范例

$this->loadModel('mysql', 'solr');

Controller::getView


獲取 View 視圖類

View Controller::getView ( void )
  • 參數

  • 返回值
    視圖類實例

  • 范例

$view = $this->getView();

Controller::throw404


拋出 404 異常

void Controller::throw404 ( string $message ) throws E404Exception
  • 參數
    $message - 異常信息

  • 返回值

  • 異常
    拋出 E404Exception 異常

  • 范例

$this->throw404('找不到商品');
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,837評論 18 139
  • ¥開啟¥ 【iAPP實現進入界面執行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 6,497評論 0 17
  • 國家電網公司企業標準(Q/GDW)- 面向對象的用電信息數據交換協議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 11,081評論 6 13
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,739評論 18 399
  • 早春的一個下午,在太陽快下山時拍攝的。是一株不知道名字的花,細細的枝上只剩下一片枯葉,用了仰視,逆光來拍攝。...
    茶葉蛋的Cha閱讀 351評論 0 2