Справка по маршрутизации cakePHP

Здесь я пытаюсь перенаправить страницу, не показывая ее действие в URL-адресе,

Например: URL-адрес http://localhost/brands/1/xyz

Router::connect(
    '/brands/:id/:name',
    array(
        'controller' => 'brands',
        'action' => 'index',
        'id' => '[0-9]{1,}',
        'name' => '[a-z]{1,}'
    )
);

работает нормально....

Но мне нужно сделать id и name необязательными, и я попробовал это:

Router::connect(
    '/brands/:id/:name',
    array(
        'controller' => 'brands',
        'action' => 'index',
        'id' => '[0-9]{1,}',
        'name' => '[a-z]{1,}'
    )
);

согласно http://book.cakephp.org/view/542/Defining-Routes< /а>

Но когда я пробую этот URL-адрес http://localhost/brands/1, он ищет действие 1, но http://localhost/brands/1/xyz работает нормально.

Есть ли ошибка в моей конфигурации маршрутизации????


person RSK    schedule 17.07.2010    source источник
comment
Как правило, к настоящему времени кто-то с достаточной репутацией наткнулся бы на ваш вопрос и исправил форматирование. Тем не менее, я предлагаю вам отредактировать вопрос и отформатировать код, используя предоставленные функции, чтобы сделать ваше сообщение более разборчивым. (Выберите части, которые являются кодом, и нажмите значок с 1 и 0 или нажмите CTRL + K на клавиатуре.)   -  person George Marian    schedule 17.07.2010
comment
Идентификатор и название одного и того же бренда? Я имею в виду, используется ли название в качестве слизняка, чтобы напечатать понятное название бренда? В этом случае имя необходимо добавить к URL-адресу при вводе URL-адреса localhost/brands/1 (в этом случае можно предложить немного больше кода..)   -  person Oscar    schedule 17.07.2010


Ответы (2)


Если вы просто хотите иметь доступ к http://localhost/brands/1, вам нужно добавить этот маршрут:

Router::connect('/brands/:id',
   array('controller' => 'brands','action' => 'index','id' => '[0-9]{1,}')
);

(а также сохранить исходный маршрут)

Router::connect('/brands/:id/:name',
    array('controller' => 'brands','action' => 'index','id' => '[0-9]{1,}','name' => '[a-z]{1,}')
);

(и, наконец, маршрут для /brands)

Router::connect('/brands',
    array('controller' => 'brands','action' => 'index')
);

Затем проверьте $this->params['id'] и $this->params['name'] в контроллере. При необходимости перенаправьте на правильный URL-адрес (если страница одна и та же, и вы всегда хотите, чтобы имя было в URL-адресе, что хорошо для SEO).

person Oscar    schedule 17.07.2010
comment
но это должно быть необязательным... если я буду маршрутизировать таким образом, то, когда я попытаюсь получить доступ к /brands/, будет выдана ошибка........ - person RSK; 19.07.2010
comment
Обновил ответ. Вам нужен один дополнительный маршрут для доступа к /brands. - person Oscar; 22.07.2010

Укажите второй маршрут, опуская необязательные параметры.

person sibidiba    schedule 17.07.2010