位置:首页 > PHP > ThinkPHP >

TP6基础:控制器应用如何获取url里携带的参数信息

字号+ 作者:micloud 来源:www.seoalphas.com 2021-07-14 15:46 浏览量:1951

上篇文章中的的代码Demo控制器继承了系统提供给我们的一个基类:BaseController.php,这样我们就可以直接使用该控制器里面提供的方法(这个基类控制器tp5默认是没有的,tp6默认存在)。

BaseController控制器部分代码:

/**
* 构造方法
* @access public
* @param  App  $app  应用对象
*/
public function __construct(App $app)
{
   $this->app     = $app;
   $this->request = $this->app->request;

   // 控制器初始化
   $this->initialize();
}

这个构造方法通过依赖注入的方式实现,我们在tp5中熟悉的获取参数的方法$this->request就是从这里来的。

打开\vendor\topthink\framework\src\think\App.php文件,在代码中并没有request方法,但是我们能看到App继承了一个Container的类。

打开\vendor\topthink\framework\src\think\Container.php文件,同样也没有request方法,不过我们在代码里可以发现:

public function __get($name)
{
   return $this->get($name);
}

当获取一个不存在的方法时,会默认调用这个__get()方法。这个方法调用了当前类中的get方法:

/**
* 获取容器中的对象实例
* @access public
* @param string $abstract 类名或者标识
* @return object
*/
public function get($abstract)
{
   if ($this->has($abstract)) {
       return $this->make($abstract);
   }

   throw new ClassNotFoundException('class not exists: ' . $abstract, $abstract);
}

继续调用make方法:

/**
* 创建类的实例 已经存在则直接获取
* @access public
* @param string $abstract    类名或者标识
* @param array  $vars        变量
* @param bool   $newInstance 是否每次创建新的实例
* @return mixed
*/
public function make(string $abstract, array $vars = [], bool $newInstance = false)
{
   $abstract = $this->getAlias($abstract);

   if (isset($this->instances[$abstract]) && !$newInstance) {
       return $this->instances[$abstract];
   }

   if (isset($this->bind[$abstract]) && $this->bind[$abstract] instanceof Closure) {
       $object = $this->invokeFunction($this->bind[$abstract], $vars);
   } else {
       $object = $this->invokeClass($abstract, $vars);
   }

   if (!$newInstance) {
       $this->instances[$abstract] = $object;
   }

   return $object;
}

获取参数:$this->request->param()

public function request(){

   var_dump($this->request->param());
}

其他获取数据的方法:

图片.png

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • ThinkPHP5控制器验证使用方法

    ThinkPHP5控制器验证使用方法

    浏览次数:7479

  • thinkPHP时间周期查询:今日、昨日、上周、本月范围查询

    thinkPHP时间周期查询:今日、昨日、上周、本月范围查询

    浏览次数:7249

  • thinkphp5.1+配置文件结构及获取

    thinkphp5.1+配置文件结构及获取

    浏览次数:5939

  • thinkphp5部署于Linux中nginx多站点解决方案

    thinkphp5部署于Linux中nginx多站点解决方案

    浏览次数:3900

网友点评
评论区域