赞
踩
ThinkPHP V5.0的控制器定义比较灵活,可以无需继承任何的基础类,也可以继承官方封装的\think\Controller
类或者其他的控制器类。
\think\Controller 控制器的5个属性和8个方法
5个属性
1 视图类实例对象protected $view
- class Index extends Controller
- {
- $this->view->assign('user','a');
-
- $this->view->fetch();
- }
2 请求类实例对象protected $request
- class Index extends Controller
- {
- $this->request->ip(); //获取请求ip
- }
3 验证失败是否抛出异常protected $failException = false
4 是否开启批量验证 protected $batchValidate
5 前置方法列表 protected $beforeActionList
指定某个方法为其他方法的前置操作,数组键名为需要调用的前置方法名,无值的话为当前控制器下所有方法的前置方法
- ['except' => '方法名,方法名'] //表示这些方法不使用前置方法,
-
- ['only' => '方法名,方法名'] //表示只有这些方法使用前置方法。
-
- class Index extends Controller{
-
- //first是所有方法的前置方法(其它方法在访问时会触发first方法)
-
- //second是所有方法(除了hello方法)的前置方法(其它方法在访问时会触发second方法)
-
- //three是hello,data方法的前置方法(hello,data方法在访问时会触发three方法)
-
- protected $beforeActionList = [
-
- 'first',
-
- 'second' => ['except'=>'hello'],
-
- 'three' => ['only'=>'hello,data'],
-
- ];
-
- protected function first(){}
-
- protected function second(){}
-
- protected function three(){}
-
- public function hello(){}
-
- public function data(){}
- }

8 个方法:
1 构造方法 __construct()
2 初始化函数 __initialize()
3 加载模板 fetch()
- public function index()
- {
- return this->fetch(); //返回视图模板
- }
5 初始化模板引擎 engine()
使用tp5自带的模板引擎,也可以使用Smarty或其它模板引擎
6 模板变量赋值 assign()
- 5 初始化模板引擎 engine()
-
- 使用tp5自带的模板引擎,也可以使用Smarty或其它模板引擎
-
- 6 模板变量赋值 assign()
7 验证失败抛出异常 validateFailException
8 验证数据 validate(见 验证)
跳转与重定向
两个跳转方法 success
和 error
,用于页面跳转提示
跳转地址是可选的,success方法的默认跳转地址是$_SERVER["HTTP_REFERER"]
,error方法的默认跳转地址是javascript:history.back(-1)
可以使用项目内部的模板文件
- //默认错误跳转对应的模板文件'dispatch_error_tmpl' => 'public/error', //view/public/error
-
- //默认成功跳转对应的模板文件'dispatch_success_tmpl' => 'public/success', //view/public/success
模板文件可以使用模板标签,并且可以使用下面的模板变量:
变量 | 含义 |
---|---|
$data | 要返回的数据 |
$msg | 页面提示信息 |
$code | 返回的code |
$wait | 跳转等待时间 单位为秒 |
$url | 跳转页面地址 |
重定向
\think\Controller
类的redirect
方法可以实现页面的重定向功能
- //重定向到News模块的Category操作
-
- $this->redirect('News/category', ['cate_id' => 2]);
-
-
空操作
空操作是指系统在找不到指定的操作方法的时候,会定位到空操作(_empty
)方法来执行,利用这个机制,我们可以实现错误页面和一些URL的优化
空控制器
空控制器的概念是指当系统找不到指定的控制器名称的时候,系统会尝试定位空控制器(Error),利用这个机制我们可以用来定制错误页面和进行URL的优化
如果要获取当前的请求信息,可以使用\think\Request
类,如果在控制器(继承了think\Controller)里直接调用属性request($this->request)
获取URL信息
- $request = Request::instance();
-
- echo 'domain: ' . $request->domain(); // 获取当前域名
-
- echo 'file: ' . $request->baseFile(); // 获取当前入口文件
-
- echo 'url: ' . $request->url(); // 获取当前URL地址 不含域名
-
- echo 'url with domain: ' . $request->url(true); // 获取包含域名的完整URL地址
-
- echo 'url without query: ' . $request->baseUrl(); // 获取当前URL地址 不含QUERY_STRING
-
- echo 'root:' . $request->root(); // 获取URL访问的ROOT地址
-
- echo 'root with domain: ' . $request->root(true); // 获取URL访问的ROOT地址
-
- echo 'pathinfo: ' . $request->pathinfo(); // 获取URL地址中的PATH_INFO信息
-
- echo 'pathinfo: ' . $request->path(); // 获取URL地址中的PATH_INFO信息 不含后缀
-
- echo 'ext: ' . $request->ext(); // 获取URL地址中的后缀信息

设置/获取 模块/控制器/操作名称
- $request = Request::instance();
-
- echo "当前模块名称是" . $request->module();
-
- echo "当前控制器名称是" . $request->controller();
-
- echo "当前操作名称是" . $request->action();
获取请求参数
- $request = Request::instance();
-
- echo '请求方法:' . $request->method();
-
- echo '资源类型:' . $request->type();
-
- echo '访问ip地址:' . $request->ip();
-
- echo '是否AJax请求:' . var_export($request->isAjax(), true);
-
- echo '请求参数:';dump($request->param());
-
- echo '请求参数:仅包含name';dump($request->only(['name']));
-
- echo '请求参数:排除name';dump($request->except(['name']));
检测变量是否设置
可以使用has
方法来检测一个变量参数是否设置
- Request::instance()->has('id','get');
-
- Request::instance()->has('name','post');
-
- //或者使用助手函数
-
- input('?get.id');
-
- input('?post.name');
变量获取
变量类型方法包括
例 获取PARAM
变量
- Request::instance()->param('name'); // 获取当前请求的name变量
-
- Request::instance()->param(); // 获取当前请求的所有变量(经过过滤)
-
- Request::instance()->param(false); // 获取当前请求的所有变量(原始数据)
-
- Request::instance()->param(true); // 获取当前请求的所有变量(包含上传文件)
-
- 使用助手函数实现
-
- input('param.name');
获取请求类型
- if (Request::instance()->isGet()) echo "当前为 GET 请求"; // 是否为 GET 请求
- if (Request::instance()->isPost()) echo "当前为 POST 请求"; // 是否为 POST 请求
- if (Request::instance()->isPut()) echo "当前为 PUT 请求"; // 是否为 PUT 请求
- if (Request::instance()->isDelete()) echo "当前为 DELETE 请求"; // 是否为 DELETE 请求
- if (Request::instance()->isAjax()) echo "当前为 Ajax 请求"; // 是否为 Ajax 请求
- if (Request::instance()->isPjax()) echo "当前为 Pjax 请求"; // 是否为 Pjax 请求
- if (Request::instance()->isMobile()) echo "当前为手机访问"; // 是否为手机访问
- if (Request::instance()->isHead()) echo "当前为 HEAD 请求"; // 是否为 HEAD 请求
- if (Request::instance()->isPatch()) echo "当前为 PATCH 请求"; // 是否为 Patch 请求
- if (Request::instance()->isOptions()) echo "当前为 OPTIONS 请求";
- if (Request::instance()->isCli()) echo "当前为 cli"; // 是否为 cliif
- if (Request::instance()->isCgi()) echo "当前为 cgi"; // 是否为 cgiif
可以使用Request对象的header方法获取当前请求的HTTP 请求头信息
- $info = Request::instance()->header();
-
- echo $info['accept'];
-
- echo $info['accept-encoding'];
-
- echo $info['user-agent'];
方法注入 如果需要在Request
请求对象中添加自己的方法,可以使用Request
对象的方法注入功能
- // 通过hook方法注入动态方法Request::hook('user','getUserInfo');
- getUserInfo函数定义如下
-
- function getUserInfo(Request $request, $userId){
- // 根据$userId获取用户信息
- return $info;
- }
我们可以直接在控制器中使用
- public function index(){
- $info = Request::instance()->user($userId);
- }
可以动态注入当前Request
对象的属性
- // 动态绑定属性
- Request::instance()->bind('user',new User);
- // 或者使用
- Request::instance()->user = new User;
获取绑定的属性使用下面的方式
Request::instance()->user;
参数绑定
tp5默认的参数绑定是按名称绑定即url上以名值对方式对应
- // URL参数方式改成顺序解析'
-
- url_param_type' => 1,
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。