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
}