Задачи получения параметров в Yii2 - PullRequest
0 голосов
/ 18 февраля 2020

Мой вопрос заключается в том, что у меня будет ? в начале имени параметра get. Например, если URL равен

https://example.com/path?id=2

, я получу параметр get с именем ?id. Как я могу получить id без ? вместо того, чтобы использовать такой способ:

https://example.com/path?&id=2

Он подключен:)

------------- --- Вот подробности ----------------

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

[
    'urlManager' => [
        'enablePrettyUrl'   => true,
        'showScriptName'    => false,
        'rules' => [
            [
                'pattern'   => '<lang:(zh|en)>/login',
                'route'     => 'account/default/login',
            ],
            [
                'pattern'   => '<lang:(zh|en|api)>/<modules>/<controller>/<action>',
                'route'     => '<modules>/<controller>/<action>',
                'defaults'  => [
                    'lang'      => 'zh',
                    'modules'   => 'dashboard',
                    'controller'=> 'default',
                    'action'    => 'index',
                ],
            ],
        ],
    ],
];

Видите ли, я буду использовать * Параметр 1018 * для управления языковой версией веб-сайта. И я обнаружил, что Yii будет обрабатывать lang в качестве параметра get. Так что это проблема. lang может быть первым параметром get, поэтому php обрабатывает ? как часть имени параметра.

если я распечатаю параметры получения, я получу это.

https://example.com/en/modules/controller/action?id=1

Код будет:

var_dump(\Yii::$app->request->get());

Будет напечатано:

array(2) { ["lang"]=> string(3) "en" ["?id"]=> string(1) "1" }

THX A LOT.

1 Ответ

0 голосов
/ 18 февраля 2020

Включите параметр ID в шаблон, с которым вы сопоставляете.

[
    'urlManager' => [
        'enablePrettyUrl'   => true,
        'showScriptName'    => false,
        'rules' => [
            [
                'pattern'   => '<lang:(zh|en)>/login',
                'route'     => 'account/default/login',
            ],
            [
                // Add the id to the pattern in the following line
                'pattern'   => '<lang:(zh|en|api)>/<modules>/<controller>/<action>/<id:\d+>',
                'route'     => '<modules>/<controller>/<action>',
                'defaults'  => [
                    'lang'      => 'zh',
                    'modules'   => 'dashboard',
                    'controller'=> 'default',
                    'action'    => 'index',
                ],
            ],
        ],
    ],
];

Изменение элемента pattern на следующее:

'pattern' => '<lang:(zh|en|api)>/<modules>/<controller>/<action>/<id:\d+>',

Захватит ди git после sla sh и сделайте его доступным для вашего действия в качестве параметра метода $id.

Если вы хотите использовать знак вопроса вместо sla sh, чтобы отделить действие от параметра, я думаю вы могли бы использовать этот шаблон:

'pattern' => '<lang:(zh|en|api)>/<modules>/<controller>/<action>?<id:\d+>'

Но я не пробовал.

...