Несколько переменных для передачи в URL - Yii2

1

Я хочу создать URL-адрес, который может обрабатывать несколько параметров следующим образом.

www.mysite.com/index.php/controller/param1/param2/param3/param4/mySlug 

Но все же быть в состоянии быть гибким и передавать меньше информации

www.mysite.com/index.php/controller/param1/parama/my_slug_2 

Мы могли бы предположить, что в конце концов есть пуля, если это упростит ситуацию. Есть ли что-нибудь в Yii2 urlManager, я могу это реализовать.

Теги:
yii2
yii
yii-url-manager

3 ответа

1

Просто настройте свое правило со значениями по умолчанию ваших параметров следующим образом:

'urlManager' => [
        'enablePrettyUrl' => true,
        'showScriptName' => false,
        'rules' => [
            [
                'pattern' => 'test/<param1:\d+>/<param2:\d+>/<param3:\d+>/<param4:\d+>/<slug>',
                'route' => 'site/test',
                'defaults' => [
                    'param1' => null,
                    'param2' => null,
                    'param3' => null,
                    'param4' => null,
                ]
            ]
        ]
    ],

Все параметры, которые имеют значение по умолчанию, не требуются и могут быть пропущены. Вот примеры поведения:

http://yii2.local/test/slug:

skipped.array (size=5)
  'param1' => null
  'param2' => null
  'param3' => null
  'param4' => null
  'slug' => string 'slug' (length=4)  

Http://yii2.local/test/2/4/slug

array (size=5)
  'param1' => string '2' (length=1)
  'param2' => string '4' (length=1)
  'param3' => null
  'param4' => null
  'slug' => string 'slug' (length=4)
  • 0
    Это выглядит хорошо, вернусь после того, как реализовано, чтобы вы знали, сработало ли это.
  • 0
    @ahervin Это было успешным для тебя?
Показать ещё 3 комментария
0

Это работает немного лучше, так как позволяет любое количество необязательных параметров, отлично, если, например, вы создаете дерево категорий, которое может быть на уровне x глубоким (вам также не нужно пули, если не нужно):

В config:

'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => [
        [
            'pattern' => 'test/<params:.*>/<slug>',
            'route' => 'site/test',
            'encodeParams' => false,
            'defaults' => [
                'params' => null,
            ]
        ]
    ]
],

Затем вы можете получить массив всех возможных параметров в контроллере:

public function actionTest($params = null, $slug) {     

    if (!empty($params)) {
        $params = explode('/', $params);
    }
    // do whatever...

}
0

Ужасно, что это вопрос на 2 года, и ответ такой простой.

Идея состоит в том, что по какой-то причине, когда ActiveForm плохо настроен для запросов GET, особенно в отношении действия, это вызовет этот странный эффект.

Объяснение: Причина такого поведения объясняется уникальной проверкой, необходимой в методе Yii Html :: beginForm. Параметры запроса в действии игнорируются для метода GET, поэтому Yii Html :: beginForm использует скрытые входы для каждого параметра GET, чтобы добавить их обратно. Эти скрытые входы укладываются поверх последнего вызова URI с каждой подачей. "Предыдущая тема следующая тема"

Это можно решить, просто добавив хорошо настроенное действие в форму $ form = ActiveForm.

На Yii2:

$form = ActiveForm::begin([
                'method' => 'get',
                'action' => Url::to(['/search']),
            ]);

Это избавится от этого ужасного эффекта. Для получения дополнительной информации об этом читайте форум Yii

Надеюсь, это поможет любому другому, который работает над проблемой.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню