Неверный запрос, отсутствуют обязательные параметры Yii2 - PullRequest
0 голосов

У меня проблема с запросом GET.Если я отправляю запрос GET как /api/v1/users/user-settings?key=model-manual-user-settings в моем приложении, я получаю ответ, подобный следующему:

{"name":"Bad Request","message":"Missing required parameters: key", "code":0, "status":400, "type":"yii\\web\\BadRequestHttpException"}

Выполнить метод в моем действии

 /**
  * Получение пользовательских данных по ключу
  *
  * @param string $key Ключ пользовательских параметров
  * @return array
  */
  public function run($key)
  {
      $component = new UserSettingsComponent($key);
      return $component->getSettingsWithParams();
  }

Часть файла журнала yii2:

2018-05-25 18:58:52 [127.0.0.1][1][tsdsfjgmllh43vfb264qimc3fv][error][yii\web\HttpException:400] yii\web\BadRequestHttpException: Missing required parameters: key in /var/www/arm/vendor/yiisoft/yii2/web/Controller.php:149
Stack trace:
#0 /var/www/arm/vendor/yiisoft/yii2/base/Action.php(88): yii\web\Controller->bindActionParams(Object(api\actions\users\user_settings\IndexAction), Array)
#1 /var/www/arm/vendor/yiisoft/yii2/base/Controller.php(157): yii\base\Action->runWithParams(Array)
#2 /var/www/arm/vendor/yiisoft/yii2/base/Module.php(528): yii\base\Controller->runAction('index', Array)
#3 /var/www/arm/vendor/yiisoft/yii2/web/Application.php(103): yii\base\Module->runAction('v1/users/user-s...', Array)
#4 /var/www/arm/vendor/yiisoft/yii2/base/Application.php(386): yii\web\Application->handleRequest(Object(yii\web\Request))
#5 /var/www/arm/api/web/index.php(15): yii\base\Application->run()
#6 {main}
2018-05-25 18:58:52 [127.0.0.1][1][tsdsfjgmllh43vfb264qimc3fv][info][application] $_GET = [
    'args' => ''
]

...

$_SERVER = [
    'USER' => 'www-data'
    'HOME' => '/var/www'
    'HTTP_X_COMPRESS' => 'null'
    'HTTP_COOKIE' => 'PHPSESSID=tsdsfjgmllh43vfb264qimc3fv; _csrf=f70915c9bfa9e77535bd94fa3287cb4347f248c120e26332eca5a1cebc7dba4ca%3A2%3A%7Bi%3A0%3Bs%3A5%3A%22_csrf%22%3Bi%3A1%3Bs%3A32%3A%22mNhgJJk1mrM_luk3c26x-dBOVUY62fpo%22%3B%7D'
    'HTTP_ACCEPT_LANGUAGE' => 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7'
    'HTTP_ACCEPT_ENCODING' => 'gzip, deflate'
    'HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8'
    'HTTP_USER_AGENT' => 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'
    'HTTP_UPGRADE_INSECURE_REQUESTS' => '1'
    'HTTP_CACHE_CONTROL' => 'max-age=0'
    'HTTP_CONNECTION' => 'keep-alive'
    'HTTP_HOST' => 'arm.local'
    'REDIRECT_STATUS' => '200'
    'SERVER_NAME' => 'arm.local'
    'SERVER_PORT' => '80'
    'SERVER_ADDR' => '127.0.0.1'
    'REMOTE_PORT' => '42354'
    'REMOTE_ADDR' => '127.0.0.1'
    'SERVER_SOFTWARE' => 'nginx/1.10.3'
    'GATEWAY_INTERFACE' => 'CGI/1.1'
    'REQUEST_SCHEME' => 'http'
    'SERVER_PROTOCOL' => 'HTTP/1.1'
    'DOCUMENT_ROOT' => '/var/www/arm'
    'DOCUMENT_URI' => '/api/web/index.php'
    'REQUEST_URI' => '/api/v1/users/user-settings?key=wagons-array-user-settings'
    'SCRIPT_NAME' => '/api/web/index.php'
    'CONTENT_LENGTH' => ''
    'CONTENT_TYPE' => ''
    'REQUEST_METHOD' => 'GET'
    'QUERY_STRING' => 'args'
    'SCRIPT_FILENAME' => '/var/www/arm/api/web/index.php'
    'FCGI_ROLE' => 'RESPONDER'
    'PHP_SELF' => '/api/web/index.php'
    'REQUEST_TIME_FLOAT' => 1527274732.2266
    'REQUEST_TIME' => 1527274732
]

Конфигурация менеджера URL:

'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'enableStrictParsing' => false,
    'rules' => [
        '/settings' => '/settings',
        '/<action>' => '/site/<action>',
        '/<controller>' => '/<controller>/<action>',
        '/<controller>/<action>' => '/<controller>/<action>',
        '/<module>/<action>' => '/<module>/default/<action>',
        [
            'class' => 'yii\rest\UrlRule',
            'controller' => [
                # some controllers 
                'v1/users/user-groups',
                'v1/users/user-settings',
            ],
            'pluralize'=>false
        ],
    ],
]

раздел конфигурации nginx

location /api/ {
    root /var/www/arm/api/web;
    try_files $uri /api/web/index.php?args;
}

Также я вижу эти строки в моем журнале nginxfile:

2018/05/25 21:56:21 [error] 27040#27040: *74 FastCGI sent in stderr: "PHP message: PHP Warning:  Invalid argument supplied for foreach() in /var/www/arm/vendor/yiisoft/yii2/helpers/BaseArrayHelper.php on line 123" while reading response header from upstream, client: 127.0.0.1, server: arm.local, request: "GET /api/v1/users/user-settings?key=wagons-array-user-settings HTTP/1.1", upstream: "fastcgi://127.0.0.1:9001", host: "arm.local"
2018/05/25 21:58:52 [error] 27040#27040: *80 FastCGI sent in stderr: "PHP message: PHP Warning:  Invalid argument supplied for foreach() in /var/www/arm/vendor/yiisoft/yii2/helpers/BaseArrayHelper.php on line 123" while reading response header from upstream, client: 127.0.0.1, server: arm.local, request: "GET /api/v1/users/user-settings?key=wagons-array-user-settings HTTP/1.1", upstream: "fastcgi://127.0.0.1:9001", host: "arm.local"

Примечание. Это началось после обновления yii2 до 2.0.15.1 и php 7.2.5.Я пытаюсь понизить до php7.2.3, проблема все еще существует.В рабочей версии мое приложение использовало yii2 v2.0.13 и php 7.2.3, и у меня нет этой проблемы.Если я понижаю версию yii2 до 2.0.13, я получаю эту ошибку:

yiisoft/yii2-gii 2.0.7 requires yiisoft/yii2 ~2.0.14 -> satisfiable by yiisoft/yii2[2.0.x-dev]

соотв.если я пытаюсь понизить версию yiisoft / yii2-gii до версии 2.0.0, я получаю эту ошибку:

The requested package yiisoft/yii2-gii (locked at 2.0.7, required as 2.0.0) is satisfiable by yiisoft/yii2-gii[2.0.7]

server nginx + php-fpmYii версия 2.0.15.1php версия 7.2.5-1nginx версия 1.10

У кого-нибудь есть идеи?

1 Ответ

0 голосов
/ 26 мая 2018

У вас есть опечатка в конфигурации nginx, вы пропустили $ до args:

location /api/ {
    root /var/www/arm/api/web;
    try_files $uri /api/web/index.php?$args;
}
...