Задать вопрос

Как написать правило для urlManager?

Возможно ли написать такое правило, которое будет из адреса вида:
/site/index/section/1 в /any_word/
Соответственно для каждого section будет свой any_word.

Конфиг urlManager на данный момент:

'urlManager' => array(
            'urlFormat' => 'path',
            'rules' => array(
                '<controller:\w+>/<id:\d+>' => '<controller>/view',
            //'<controller:\w+>/<view:\w+>' => '<controller>/page',
            ),
            'showScriptName' => false,
        ),
  • Вопрос задан
  • 3110 просмотров
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
nikel303
@nikel303
Вероятно вам подойдет www.yiiframework.com/doc/guide/1.1/ru/topics.url#sec-9
Ответ написан
Комментировать
metamorph
@metamorph
Вы должны понимать, что урлы вида /anyword/ сразу ломают стандартную схему /controller/action/...
Есть как минимум три варианта решения проблемы:
1. сначала прописать все существующие контроллеры, а если не подошло - перенаправлять на site/index
2. сначала прописать все существующие "anyword"
3. каким-то образом маркировать anyword-урлы, чтобы было понятно, что это не контроллер и не модуль.

Я предпочитаю использовать суффикс-маркировку, т. е. не /anyword, а /anyword.html
Это чаще всего согласуется с требованиями сеошников и не вызывает проблем из пунктов 1 и 2.
Ответ написан
zetamen
@zetamen
В поисках нового
ЧПУ можно сделать так

Добавить правило
'<link:[\w\-]+>' => 'site/post',

В контроллере SiteController добавить action
public function actionPost()
{
	$link = Yii::app()->request->getParam('link');
	if ($link == null)
	{
		throw new CHttpException(404, 'The requested page does not exist.');
	}
	$post = Post::model()->findByAttributes(array('link' => $link));
	if ($post == null)
	{
		throw new CHttpException(404, 'The requested page does not exist.');
	}
	$this->render('post', array(
		'model' => $post
	));
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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