定义控制器
控制器通常需要继承系统的Controller类或者其子类,例如,下面定义了一个\Home\Controller\IndexController
控制器的名称采用驼峰法命名(首字母大写),控制器文件位于Home/Controller/IndexController.class.php.
多层控制器
看文档,主要就是可以把控制器分为什么访问控制器、事件控制器之类的,访问控制器主要用于处理url什么的。如果定义其他层次的控制器可以不用继承Control类。
多级控制器
看文档,就是定义子目录的深度
实例化控制器
A方法实例化的是默认控制器层(Controller),如果你要实例化其他的分层控制器的话,可以使用:
// 假设当前模块是Home模块// 实例化Event控制器
$User = A('User','Event');
$Blog = A('Admin/Blog','Event');
上面的代码等效于:
// 实例化Home模块的User事件控制器
$User = new \Home\Event\UserEvent();
// 实例化Admin模块的Blog事件控制器
$Blog = new \Admin\Event\BlogEvent();
前置和后置操作
前置和后置操作指的是在执行某个操作方法之前和之后会自动调用的方法,不过仅对访问控制器有效。
'; }
public function index(){ echo 'index
'; }
//后置操作方法
public function _after_index(){ echo 'after
'; }}
如果我们访问http://serverName/index.php/Home/Index/index
结果会输出
before
index
after
Action参数绑定
看文档
伪静态
就是可以再url后面加上后缀。
URL大小写
'URL_CASE_INSENSITIVE' =>true
加上这个配置,项目就会不区分大小写。
这里需要注意一个地方,一旦开启了不区分URL大小写后,如果我们要访问类似UserTypeController的控制器,那么正确的URL访问应该是:
// 正确的访问地址
http://serverName/index.php/home/user_type/index
// 错误的访问地址(linux环境下)
http://serverName/index.php/home/usertype/index
URL生成
U('地址表达式',['参数'],['伪静态后缀'],['显示域名'])
地址表达式的格式定义如下:
[模块/控制器/操作#锚点@域名]?参数1=值1&参数2=值2...
Ajax返回
主要就是调用ajaxReturn方法。
默认配置采用JSON格式返回数据(通过配置DEFAULT_AJAX_RETURN进行设置),我们可以指定格式返回,例如:
// 指定XML格式返回数据
$data['status'] = 1;
$data['content'] ='content';
$this->ajaxReturn($data,'xml');
页面跳转
系统的\Think\Controller类内置了两个跳转方法success和error。
success和error方法的第一个参数表示提示信息,第二个参数表示跳转地址,第三个参数是跳转时间(单位为秒),例如:
// 操作完成3秒后跳转到 /Article/index
$this->success('操作完成','/Article/index',3);
// 操作失败5秒后跳转到 /Article/error
$this->error('操作失败','/Article/error',5);
页面跳转模板文件
success和error方法都可以对应的模板,默认的设置是两个方法对应的模板都是:
//默认错误跳转对应的模板文件
'TMPL_ACTION_ERROR' => THINK_PATH . 'Tpl/dispatch_jump.tpl',
//默认成功跳转对应的模板文件
'TMPL_ACTION_SUCCESS' => THINK_PATH . 'Tpl/dispatch_jump.tpl',
模板文件可以使用模板标签,并且可以使用下面的模板变量:
变量 含义
$message 页面提示信息
$error 页面错误提示信息
$waitSecond 跳转等待时间 单位为秒
$jumpUrl 跳转页面地址
跳转与Ajax
success和error方法会自动判断当前请求是否属于Ajax请求,如果属于Ajax请求则会调用ajaxReturn方法返回信息。 ajax方式下面,success和error方法会封装下面的数据返回:
$data['info'] = $message; // 提示信息内容
$data['status'] = $status; // 状态 如果是success是1 error 是0
$data['url'] = $jumpUrl; // 成功或者错误的跳转地址
重定向
Controller类的redirect方法可以实现页面的重定向功能。
redirect方法的参数用法和U函数的用法一致(参考URL生成部分),例如:
//重定向到New模块的Category操作
$this->redirect('New/category', array('cate_id' => 2), 5, '页面跳转中...');
上面的用法是停留5秒后跳转到New模块的category操作,并且显示页面跳转中字样,重定向后会改变当前的URL地址。
判断请求类型
在很多情况下面,我们需要判断当前操作的请求类型是GET 、POST 、PUT或 DELETE,一方面可以针对请求类型作出不同的逻辑处理,另外一方面有些情况下面需要验证安全性,过滤不安全的请求。
系统内置了一些常量用于判断请求类型,包括:
常量 说明
IS_GET 判断是否是GET方式提交
IS_POST 判断是否是POST方式提交
IS_PUT 判断是否是PUT方式提交
IS_DELETE 判断是否是DELETE方式提交
IS_AJAX 判断是否是AJAX提交
REQUEST_METHOD 当前提交类型
空操作
空操作是指系统在找不到请求的操作方法的时候,会定位到空操作(_empty)方法来执行。
function _emtpy($fuc_name);
注意:空操作方法仅在你的控制器类继承系统的Think\Controller类才有效,否则需要自己定义 __call 来实现。
空控制器
定义
city($cityName); }
//注意 city方法 本身是 protected 方法
protected function city($name){
//和$name这个城市相关的处理
echo '当前城市' . $name; }
}
插件控制器
看文档
操作绑定到类
主要就是细化工作,用处不是非常大,用的时候看文档。