控制器
控制器(Controller)和动作(Action)创建规则
控制器本质是一个 Class 类,类的命名需要开头字母大写,并创建在应用的 Controller 目录中,文件名与类名保持一致,同样要开头字母大写,以 .php 扩展名结尾,例如:
myapp/Controller/Index.php
控制器类需要在代码顶部声明命名空间,并且需要继承 MiniFramework 框架的 Mini\Base\Action 核心类。控制器类中的方法对应控制器的动作,动作方法的命名需要以 Action 结尾,示例代码如下:
// 声明命名空间
namespace App\Controller;
// 引入 Action 核心类
use Mini\Base\Action;
/**
* 这是一个名为 Index 的控制器类,需要继承 Action 核心类
*/
class Index extends Action
{
/**
* 默认动作
*/
function indexAction()
{
// 在这里写动作方法的代码
}
}
默认控制器和默认动作
MiniFramework 对于控制器和动作的命名保留有默认控制器和默认动作方法,命名为 Index 的控制器类,为默认控制器类,命名为 indexAction() 的动作方法,为默认动作方法,在访问请求的 URL 中可以省略,例如:
http://你的域名/index.php?c=index&a=index
上边的访问请求地址中,index.php为应用的入口文件(通常这部分也可以省略),后边的参数 c=index 表示向名为 index 的控制器发起请求,第二个参数 a=index 表示执行名为 index 的动作方法,按照规则可以省略简写为:
http://你的域名/index.php
框架会自动去寻找默认的 Index.php 控制器类,并且也会自动在控制器类中寻找并调用名为 indexAction() 的默认动作方法。因此,请求参数 ?c=index&a=index 在 URL 中可被省略。
控制器的初始化(init)
MiniFramework 的控制器支持初始化方法,开发者可在控制器类中创建一个名为 _init() 的方法,这个方法的执行优先级高于其他动作方法,当框架发现控制器类中存在 _init() 方法时,会优先执行 _init() 然后在执行请求的动作方法,示例代码如下:
namespace App\Controller;
use Mini\Base\Action;
class Index extends Action
{
public $num = 0;
/**
* 初始化方法
*/
function _init()
{
$this->num ++;
}
function indexAction()
{
$this->num ++;
echo $this->num;
die();
}
}
上边的代码演示了控制器初始化的过程,向 index 动作发起请求,框架会在执行对应的 indexAction() 方法前,优先执行 _init() 方法,在 indexAction() 方法执行完毕后,会在浏览器上显示结果为2。
控制器和动作的内部跳转(forward)
MiniFramework 在 Mini\Base\Action 核心类中提供了用于内部跳转的 forward() 方法。通过此方法,开发者可在控制器中将当前请求进行内部跳转,并且这种跳转属于隐性跳转,仅在内部执行,浏览器地址栏不会发生变化,示例代码如下:
namespace App\Controller;
use Mini\Base\Action;
class Index extends Action
{
public $info;
function indexAction()
{
// 内部跳转至名为 show 的动作方法,第二个参数为控制器名,当前控制器可省略
$this->forward('show', 'index');
}
function showAction()
{
echo 'Show';
die();
}
}