【发布时间】:2020-01-13 19:11:23
【问题描述】:
我对 Cake 比较陌生,但我的项目有一个相当大的单个控制器文件。随着它越来越大,我发现自己创建了帮助函数(在文件的底部)来清理函数并提高可读性。
控制器文件变得如此之大以至于需要进一步重构。我创建了目录 /src/Helpers/ 来存放我的多个会话操作函数,称为 SessionManipulator.php。
由于 Cake 在请求对象中处理会话,SessionManipulator.php 看起来像这样......
use Cake\Http\ServerRequest;
class SessionManipulator
{
function __construct() {
$this->request = new ServerRequest();
}
您会注意到我对 ServerRequest 类的实例化:$this->request = new ServerRequest();
我的大部分会话操作函数都考虑了在整个程序中设置的各种 GET 变量。问题是,由于某种原因,当我做类似的事情时......
if($this->request->getQuery('pid')) {
return true;
} else {
return false;
}
行为异常。当我在调用函数之前进行故障排除并尝试查看所有 GET 数据时,例如...
print_r($this->request->getQuery());
返回空白:
Array
(
)
同时,类似的 print_r($_GET); 显示了我所追求的数据:
Array
(
[pid] => 32
)
所以,我认为有些事情我不明白。
也许 Cake 的 ServerRequest 类将 GET/POST 数据存储到一个孤立的环境中,我需要让这个 Helper 类可以访问?
更新:
我发现更新:
$this->request = new ServerRequest();
to
$this->request = Router::getRequest();
解决了所有问题,但我不确定我理解为什么...:|
【问题讨论】: