@arab789

Yii. Как сделать в rule необязательный параметр?

Есть правило:
'urlManager'=>array(
			 'urlFormat' => 'path',
                            'showScriptName'=>false,
                            'rules'=>array(
                                'page/<id:\d+>/<alias:.*>' => 'page/index/',
                                '<controller:\w+>/<id:\d+>' => '<controller>/view',
                                '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
                                '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
			),

Мне нужно добавить в правило 'page', параметр <platform:.*>, но он может и не быть.
Если писать так:
'page/<id:\d+>/<alias:.*>/<platform:.*>' => 'page/index/',

то без этого параметра не работает.
Как задать необязательный параметр?
  • Вопрос задан
  • 1146 просмотров
Решения вопроса 1
@arab789 Автор вопроса
Может и костыль конечно, но получилось решить проблему, не выставляя необязательный параметр. В 'rules' перечислил какие ссылки могут быть:
'rules'=>array(
                                'page/<id:\d+>/<alias:.*>/<platform:.*>' => 'page/index/',
                                'page/<id:\d+>/<alias:.*>' => 'page/index/',
                                'page/<id:\d+>' => 'page/index/',
                                'page' => 'page/index/',
                                '<controller:\w+>/<id:\d+>' => '<controller>/view',
                                '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
                                '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
			),
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@matperez
Попробуйте использовать

/**
	 * @var array the default GET parameters (name=>value) that this rule provides.
	 * When this rule is used to parse the incoming request, the values declared in this property
	 * will be injected into $_GET.
	 */
	public $defaultParams=array();


Как-то так вместо строчки с маршрутом
[
  'route' => 'page/index', 
  'pattern' =>'page/<id:\d+>/<alias:.*>/<platform:.*>', 
  'defaultParams => [
    'platform' => 'some platform'
  ]
]
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы