azalea php,Azalea\Controller

Controller 控制器虚类

⚠️ Controller 为抽象类,无法通过 new 方式实例化,由 Bootstrap 自动实例化,Azalea 中所有控制器必须继承此类

路由分发规则

Azalea 根据路径分隔符进行分割,规则与 Zend Framework 和 CodeIgniter 类似,规则如下

/[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 种类型

字符串:Azalea 将直接输出,常用于视图渲染

数组/对象:Azalea 将进行 json_encode 后输出,常用于接口或 Ajax 返回

Controller::__init 子类实现

控制器初始化回调函数

void Controller::__init ( void )

⚠️ 该方法若子类实现则 Bootstrap 会自动调用,常用于子类初始化

参数

返回值

范例

protected function __init()

{

if (date('h') < 12) {

$this->title = '上午';

} else {

$this->title = '下午';

}

}

Controller::__router 子类实现

动态路由回调函数

array Controller::__router ( array $paths )

⚠️ 该方法若子类实现则 Bootstrap 会自动调用

参数

$paths - 路径参数数组,第一个元素是 action 控制器方法名,剩下的元素为 arguments 参数数组

返回值

新路由数组,若无返回或返回 null,则保留原路由

Azalea 只会对返回的路由数组中 callback, action 和 arguments 进行处理,其它值将忽略

callback 和 action 必须为字符串,且优先处理 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('找不到商品');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值