cakePHP возвращает пустые параметры по запросу GET

У меня проблема с чтением параметров запроса GET: www.example.com/users/checkusername?username=e

Я использую cakePHP 3, на cakePHP 2.6.4 работает без проблем.

Таким образом, у меня есть пустой результат:

$this->log($this->request->query['username']);
$this->log( $this->params['url']);

Результат:

2015-04-28 17:28:22 Error:
2015-04-28 17:28:22 Error:

Однако, проверяя весь запрос, можно убедиться, что параметр там

$this->log($this->request);

Это вывод:

2015-04-28 17:28:22 Error: Cake\Network\Request Object
(
    [params] => Array
        (
            [plugin] => 
            [controller] => Users
            [action] => checkusername
            [_ext] => 
            [pass] => Array
                (
                )

            [_Token] => Array
                (
                    [unlockedFields] => Array
                        (
                        )

                )

        )

    [data] => Array
        (
        )

    [query] => Array
        (
        )

    [cookies] => Array
        (
            [CAKEPHP] => u8lgs1cup81331lka3a90jidd4
        )

    [_environment:protected] => Array
        (
        **removed**
            [REQUEST_METHOD] => GET
            [REQUEST_URI] => /users/checkusername?username=e
            [SCRIPT_NAME] => /index.php
        **removed**
        )

    [url] => users/checkusername
    [base] => 
    [webroot] => /
    [here] => /users/checkusername
    [trustProxy] => 
    [_detectorCache:protected] => Array
        (
            [post] => 
            [put] => 
        )

    [_input:protected] => 
    [_session:protected] => Cake\Network\Session Object
        (
            [_engine:protected] => 
            [_started:protected] => 1
            [_lifetime:protected] => 1440
            [_isCli:protected] => 
        )

)

У кого-нибудь есть идеи, как читать этот параметр?

После дополнительной отладки

Я обнаружил, что проблема связана с правилом переписывания Hiawatha. Я просто добавляю

<?php echo phpinfo(); ?>

в начале файла /webroot/index.php.

Когда я использую: https://www.example.com/?code=123

Это работает, и я получаю эти результаты

PHP Variables            Variable Value
_REQUEST["code"]           123
_GET["code"]               123
_SERVER["REQUEST_URI"]     /?code=123
_SERVER["SCRIPT_NAME"]     /index.php

Но когда я пытаюсь: https://www.example.com/users/confirm?code=123

Переменные не отображаются.

_SERVER["REQUEST_URI"]     /users/confirm/?code=123
_SERVER["SCRIPT_NAME"]     /index.php

Мое правило переписывания в соответствии с рекомендацией для книги cakePHP:

UrlToolkit {
   ToolkitID = cakephp
   RequestURI exists Return
   Match .* Rewrite /index.php
}

У кого-нибудь есть правило переписывания для cakePHP или есть где-то еще, чтобы это определить?

1 ответ

Решение

В конце всегда просто

Это правило перезаписи для cakePHP на сервере Hiawatha для получения запроса GET

UrlToolkit {
   ToolkitID = cakephp
   RequestURI exists Return
   Match .*\?(.*) Rewrite /index.php?$1
   Match .* Rewrite /index.php
}
Другие вопросы по тегам