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

 

posted on 2016-12-28 17:05  向前看!明天会更好!  阅读(320)  评论(0编辑  收藏  举报