Thinkphp控制器,1.多层控制器2.多级控制器

时间:2023-03-09 01:33:29
Thinkphp控制器,1.多层控制器2.多级控制器

1.多层控制器

ThinkPHP的控制器支持多层和多级,多层指的是控制器可以分层,例如除了默认的Controller控制器层(我们可以称之为访问控制器),还可以添加事件控制器(层),例如:

├─Controller 访问控制器
├─UserController.class.php
├─BlogController.class.php ├─Event 事件控制器
├─UserEvent.class.php
├─BlogEvent.class.php

访问控制器的名称是通过DEFAULT_C_LAYER设置的,默认是Controller

访问控制器负责外部交互响应,通过URL请求响应,

而事件控制器负责内部的事件响应,并且只能在内部调用,所以是和外部隔离的。

如果是定义其他的控制器层,则不一定必须要继承系统的Controller类或其子类,通常需要输出模版的时候才需要继承Controller类。例如:

UserEvent.class.php

<?php
namespace Home\Event;
class UserEvent {
public function login(){
echo 'login event';
}
public function logout(){
echo 'logout event';
}
}

UserController.class.php

<?php
namespace Home\Controller;
use Think\Controller;
use Home\Event\UserEvent;//记得要加上
class UserController extends Controller{
public function index($id=1){ public function test(){
$userEvent=new UserEvent();
$userEvent->login();//调用UserEvent.class.php里的login方法;
echo "ceshi";
}
}

因为操作方法就是控制器的一个方法,所以遇到有和系统的关键字冲突的方法可能就不能定义了,这个时候我们可以设置操作方法的后缀来解决,例如:

在相应的config.php里面添加配置

'ACTION_SUFFIX'         =>  'Action', // 操作方法后缀

设置操作方法的后缀为Action,这样,控制器的操作方法定义调整为:

<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
public function listAction(){
echo 'list';
}
public function helloAction(){
echo 'hello';
}
public function testAction(){
echo 'test';
}
}

多级控制器

多级控制器是指控制器可以通过子目录把某个控制器层分组存放,首先需要设置控制器的分级层次,例如,我们设置2级目录的控制器层:

在相应的config.php里面添加配置

'CONTROLLER_LEVEL'      =>  2,//允许二级控制器

控制器文件的位置放置如下:

Controller 访问控制器
├─User User分级(组)
├─UserTypeController.class.php
├─UserAuthController.class.php ├─Admin Admin分级(组)
├─UserController.class.php
├─ConfigController.class.php

多级控制器中的命名空间需要这样定义:

<?php
namespace Home\Controller\Admin;
use Think\Controller;
class IndexController extends Controller {
public function hello(){
echo 'hello';
}
public function test(){
echo 'test';
}
}

然后就可以通过URL地址访问:

http://serverName/Home/User/UserType

http://serverName/Home/Admin/User