urlManager в yii

#php #url #yii

#php #url #yii

Вопрос:

 'urlManager'=>array(
            'urlFormat'=>'path',
            'rules'=>array(
               'ongSpcl/<category:.*?>'=>'ongSpcl/index',
            ),
        ),
  

Приведенный выше код считывает URL-адрес «abc.co/ongSpcl/sp1 » как «abc.co/ongSpcl?category=sp1
Это работает!
Но моя проблема в том, что я хочу прочитать весь URL-адрес в указанном выше формате, за исключением «abc.co/ongSpcl/index «

Ответ №1:

Поместите правило для 'ongSpcl/index'=>ongSpcl/index (измените правую сторону на любой маршрут, который вы хотите) перед вашим существующим правилом. Yii выполнит первое найденное совпадение.

Кроме того, к вашему сведению, вы можете использовать <category:w > для сопоставления любых ненулевых строк буквенно-цифровых символов, если это ваше намерение.

Комментарии:

1. Спасибо за ответ, но ответ не решает мою цель. Предоставленный мной код выполняет gr8 (он читает abc.co/ongSpcl/category1 как abc.co/ongSpcl?category=category1 ) bt Я хочу добавить исключение для «индекса», чтобы dat abc.co/ongSpcl/index будет ли b читаться как abc.co/ongSpcl/index

2. Я все еще отсылаю вас к своему ответу. Возможно, это помогло бы, если бы вы опубликовали свой полный код urlManager.

Ответ №2:

Удаление трейлинга index из Yii Url, измените действие show category с ongSpcl#index на что-то другое, затем добавьте '/ongSpcl' => 'ongSpcl/index' ,

 'urlManager'=>array(
  'urlFormat'=>'path',
  'rules'=>array(
    '/ongSpcl' => 'ongSpcl/index',
    '/ongSpcl/<category:.*?>'=>'ongSpcl/show',
  ),
),
  

Заглушка для тестирования маршрутов

 class RoutingTest extends CTestCase {
  public function createUrl($route, $params=array()) {
    $url = explode('phpunit', Yii::app()->createUrl($route, $params));
    return $url[1];
  }

  public function testCorrectRoutes() {
    $this->assertEquals('/ongSpcl', $this->createUrl('ongSpcl/index'));
    $this->assertEquals('/ongSpcl/sp1', $this->createUrl('ongSpcl/show', array('category' => 'sp1'));
    //
  }