当前位置:   article > 正文

thinkphp5——控制器与请求_thinkphp5请求和控制器名字不对应

thinkphp5请求和控制器名字不对应

一 控制器

ThinkPHP V5.0的控制器定义比较灵活,可以无需继承任何的基础类,也可以继承官方封装的\think\Controller类或者其他的控制器类。

\think\Controller 控制器的5个属性和8个方法

5个属性

1 视图类实例对象protected $view

  1. class Index extends Controller
  2. {
  3. $this->view->assign('user','a');
  4. $this->view->fetch();
  5. }

2 请求类实例对象protected $request

  1. class Index extends Controller
  2. {
  3. $this->request->ip(); //获取请求ip
  4. }

3 验证失败是否抛出异常protected $failException = false

4 是否开启批量验证 protected $batchValidate

5 前置方法列表 protected $beforeActionList

指定某个方法为其他方法的前置操作,数组键名为需要调用的前置方法名,无值的话为当前控制器下所有方法的前置方法

  1. ['except' => '方法名,方法名'] //表示这些方法不使用前置方法,
  2. ['only' => '方法名,方法名'] //表示只有这些方法使用前置方法。
  1. class Index extends Controller{
  2. //first是所有方法的前置方法(其它方法在访问时会触发first方法)
  3. //second是所有方法(除了hello方法)的前置方法(其它方法在访问时会触发second方法)
  4. //three是hello,data方法的前置方法(hello,data方法在访问时会触发three方法)
  5. protected $beforeActionList = [
  6. 'first',
  7. 'second' => ['except'=>'hello'],
  8. 'three' => ['only'=>'hello,data'],
  9. ];
  10. protected function first(){}
  11. protected function second(){}
  12. protected function three(){}
  13. public function hello(){}
  14. public function data(){}
  15. }

 

8 个方法:

1 构造方法 __construct()

2 初始化函数 __initialize()

3 加载模板 fetch()

  1. public function index()
  2. {
  3. return this->fetch(); //返回视图模板
  4. }

5 初始化模板引擎 engine()

使用tp5自带的模板引擎,也可以使用Smarty或其它模板引擎

6 模板变量赋值 assign()

  1. 5 初始化模板引擎 engine()
  2. 使用tp5自带的模板引擎,也可以使用Smarty或其它模板引擎
  3. 6 模板变量赋值 assign()

7 验证失败抛出异常 validateFailException

8 验证数据 validate(见 验证)

 

跳转与重定向

两个跳转方法 success error,用于页面跳转提示

跳转地址是可选的,success方法的默认跳转地址是$_SERVER["HTTP_REFERER"],error方法的默认跳转地址是javascript:history.back(-1)

可以使用项目内部的模板文件

  1. //默认错误跳转对应的模板文件'dispatch_error_tmpl' => 'public/error', //view/public/error
  2. //默认成功跳转对应的模板文件'dispatch_success_tmpl' => 'public/success', //view/public/success

模板文件可以使用模板标签,并且可以使用下面的模板变量:

 

变量含义
       $data 要返回的数据
       $msg 页面提示信息
       $code 返回的code
       $wait 跳转等待时间 单位为秒
       $url 跳转页面地址

重定向

\think\Controller类的redirect方法可以实现页面的重定向功能

  1. //重定向到News模块的Category操作
  2. $this->redirect('News/category', ['cate_id' => 2]);

空操作

空操作是指系统在找不到指定的操作方法的时候,会定位到空操作(_empty)方法来执行,利用这个机制,我们可以实现错误页面和一些URL的优化

空控制器

空控制器的概念是指当系统找不到指定的控制器名称的时候,系统会尝试定位空控制器(Error),利用这个机制我们可以用来定制错误页面和进行URL的优化


二 请求

如果要获取当前的请求信息,可以使用\think\Request类,如果在控制器(继承了think\Controller)里直接调用属性request($this->request)

获取URL信息

  1. $request = Request::instance();
  2. echo 'domain: ' . $request->domain(); // 获取当前域名
  3. echo 'file: ' . $request->baseFile(); // 获取当前入口文件
  4. echo 'url: ' . $request->url(); // 获取当前URL地址 不含域名
  5. echo 'url with domain: ' . $request->url(true); // 获取包含域名的完整URL地址
  6. echo 'url without query: ' . $request->baseUrl(); // 获取当前URL地址 不含QUERY_STRING
  7. echo 'root:' . $request->root(); // 获取URL访问的ROOT地址
  8. echo 'root with domain: ' . $request->root(true); // 获取URL访问的ROOT地址
  9. echo 'pathinfo: ' . $request->pathinfo(); // 获取URL地址中的PATH_INFO信息
  10. echo 'pathinfo: ' . $request->path(); // 获取URL地址中的PATH_INFO信息 不含后缀
  11. echo 'ext: ' . $request->ext(); // 获取URL地址中的后缀信息

设置/获取 模块/控制器/操作名称

  1. $request = Request::instance();
  2. echo "当前模块名称是" . $request->module();
  3. echo "当前控制器名称是" . $request->controller();
  4. echo "当前操作名称是" . $request->action();

获取请求参数

  1. $request = Request::instance();
  2. echo '请求方法:' . $request->method();
  3. echo '资源类型:' . $request->type();
  4. echo '访问ip地址:' . $request->ip();
  5. echo '是否AJax请求:' . var_export($request->isAjax(), true);
  6. echo '请求参数:';dump($request->param());
  7. echo '请求参数:仅包含name';dump($request->only(['name']));
  8. echo '请求参数:排除name';dump($request->except(['name']));

检测变量是否设置

可以使用has方法来检测一个变量参数是否设置

  1. Request::instance()->has('id','get');
  2. Request::instance()->has('name','post');
  3. //或者使用助手函数
  4. input('?get.id');
  5. input('?post.name');

变量获取

变量类型方法包括

例 获取PARAM变量

  1. Request::instance()->param('name'); // 获取当前请求的name变量
  2. Request::instance()->param(); // 获取当前请求的所有变量(经过过滤)
  3. Request::instance()->param(false); // 获取当前请求的所有变量(原始数据)
  4. Request::instance()->param(true); // 获取当前请求的所有变量(包含上传文件)
  5. 使用助手函数实现
  6. input('param.name');

 获取请求类型

  1. if (Request::instance()->isGet()) echo "当前为 GET 请求"; // 是否为 GET 请求
  2. if (Request::instance()->isPost()) echo "当前为 POST 请求"; // 是否为 POST 请求
  3. if (Request::instance()->isPut()) echo "当前为 PUT 请求"; // 是否为 PUT 请求
  4. if (Request::instance()->isDelete()) echo "当前为 DELETE 请求"; // 是否为 DELETE 请求
  5. if (Request::instance()->isAjax()) echo "当前为 Ajax 请求"; // 是否为 Ajax 请求
  6. if (Request::instance()->isPjax()) echo "当前为 Pjax 请求"; // 是否为 Pjax 请求
  7. if (Request::instance()->isMobile()) echo "当前为手机访问"; // 是否为手机访问
  8. if (Request::instance()->isHead()) echo "当前为 HEAD 请求"; // 是否为 HEAD 请求
  9. if (Request::instance()->isPatch()) echo "当前为 PATCH 请求"; // 是否为 Patch 请求
  10. if (Request::instance()->isOptions()) echo "当前为 OPTIONS 请求";
  11. if (Request::instance()->isCli()) echo "当前为 cli"; // 是否为 cliif
  12. if (Request::instance()->isCgi()) echo "当前为 cgi"; // 是否为 cgiif

可以使用Request对象的header方法获取当前请求的HTTP 请求头信息

  1. $info = Request::instance()->header();
  2. echo $info['accept'];
  3. echo $info['accept-encoding'];
  4. echo $info['user-agent'];

方法注入 如果需要在Request请求对象中添加自己的方法,可以使用Request对象的方法注入功能

  1. // 通过hook方法注入动态方法Request::hook('user','getUserInfo');
  2. getUserInfo函数定义如下
  3. function getUserInfo(Request $request, $userId){
  4. // 根据$userId获取用户信息
  5. return $info;
  6. }

我们可以直接在控制器中使用

  1. public function index(){
  2. $info = Request::instance()->user($userId);
  3. }

可以动态注入当前Request对象的属性

  1. // 动态绑定属性
  2. Request::instance()->bind('user',new User);
  3. // 或者使用
  4. Request::instance()->user = new User;

获取绑定的属性使用下面的方式

Request::instance()->user;

参数绑定

tp5默认的参数绑定是按名称绑定即url上以名值对方式对应

  1. // URL参数方式改成顺序解析'
  2. url_param_type' => 1,

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/351365
推荐阅读
相关标签
  

闽ICP备14008679号