控制器定义
框架核心控制器Controller,位于/startmvc/core/Controller.php
公共控制器BaseController,位于/app/common/BaseController.php,继承于核心控制器Controller。相当于核心控制器的扩展。
自定义控制器存放在模块下的controller目录下,根据自己需要,可直接继承核心Controller或BaseController,控制器为一个类,一个控制器类就是一个php文件。
控制器规范
控制器类名为:控制器名称Controller(首字母大写)。
控制器文件名为:控制器名称Controller.php(首字母大写)。
控制器的命名空间为:app\模块\controller。
创建控制器
// app/home/controller/IndexController.php
namespace app\home\controller;
use app\common\BaseController;
class IndexController extends BaseController {
return $a;
// code
}
创建成员方法
控制器类的成员方法访问权限必须为public,方法名为:方法名+Action。代码如下:
成员方法传参
一般通过url传入参数
function indexAction($a, $b){
echo $a + $b;
}
// /home/index/index/1/2 输出:3
function indexAction($name){
echo 'hello ' . $name;
}
// /home/index/index/world 输出: hello world
传参时建议给一个默认值,防止报错
function indexAction($name = 'world'){
echo 'hello, ' . $name;
}
// home
/index/index 输出: hello world
防止注入攻击,可以给参数带上数据类型
function indexAction(int $id = 0){
// code
}
控制器的更多方法
控制器就是一个标准的php类,所以控制器支持php的特性,比如私有属性,私有方法,魔术方法
namespace app\home\controller;
use app\common\BaseController;
class IndexCtroller extends BaseController{
private $name; //声明控制器的一个私有属性
function __construct(){
parent::__construct(); // 如果控制器有构造函数,就一定要调用父类的构造函数
/*************
控制器构造函数,主要用来在创建对象时初始化对象,控制器下所有成员方法都将执行此处代码
**************/
}
function indexAction(){
$this->setName('小明');
$data['name'] = $this->name;
$this->assign($data);
//$this->assign('data',$data);
$this->display();
}
private function setName($name){ //创建控制器的私有方法,无法通过URL访问。
$this->name = $name;
}
function __call(){ //PHP类的魔术方法
$this->content('走丢了');
}
}