TP6基础:控制器应用如何获取url里携带的参数信息
作者:Alpha时间:2021-07-14 阅读数:2987 +人阅读
上篇文章中的的代码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());
}
其他获取数据的方法:
本站所有文章、数据、图片均来自互联网,一切版权均归源网站或源作者所有。
如果侵犯了你的权益请来信告知我们删除。邮箱:595397166@qq.com