CakePHP 3组件 - 请求数据或查询被清除

时间:2015-03-09 04:08:14

标签: cakephp cakephp-3.0

我遇到并发出我需要帮助的问题。我无法弄清楚为什么会这样。

我在CakePHP中创建一个组件,拦截传递给/users/login的数据,并根据参数对其进行操作。但问题是,当数据到达时,它是空的。还要注意,它在远程机器和本地机器上运行良好。当我使用Composer将此插件上传到另一个网站时,问题就开始发生了。我想知道问题是否是因为Composer将插件安装在vendor目录下。

这是我在代码startup method

中的代码
public function initialize(array $config)
{
    // ....

    $this->Controller = $this->_registry->getController();

    // ...
}

public function startup(Event $event)
{
    // Here I try to get the [test] parameter that is pass in url
    // http://www.domain.com/users/login?test=testing
    $test = $this->Controller->request->query('test');    
}

如果我尝试使用startup(Event $event)debug($this->Controller->request);内打印控制器请求,我会得到以下数组:

object(Cake\Network\Request) {
    params => [
        'plugin' => null,
        'controller' => 'Users',
        'action' => 'login',
        '_ext' => null,
        'pass' => [],
        'isAjax' => false
    ]
    data => []
    query => []
    url => 'users/login'
    base => ''
    webroot => '/'
    here => '/users/login'
    trustProxy => false
    [protected] _environment => [
        'SCRIPT_FILENAME' => '/var/www/domain.com/website/webroot/index.php',
        'SCRIPT_NAME' => '/index.php',
        'REQUEST_URI' => '/users/login?test=testing',
        'DOCUMENT_URI' => '/index.php',       

REQUEST_URI清楚地表明正在传递test

使用test安装CakePHP时,可能导致CakePHP不接受Composer参数?为什么params['pass'] => []data => []query => []为空?

1 个答案:

答案 0 :(得分:0)

经过几个小时的努力解决这个问题,我不得不带着8岁的女儿指出我正确的方向。一个简单但浪费时间,令人头疼的错误导致所有问题。该问题位于我的NGINX配置文件中。

我有以下内容:

location / {
    try_files $uri $uri/ /index.php$args;
}

但我应该有以下内容:

location / {
    try_files $uri $uri/ /index.php?$args;
}

因为我在?之后省略了index.php,所以NGINX根本没有接受在网址中传递的任何参数。

经验教训!