помощ за маршрутизиране на 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
ID и името за една и съща марка ли са? Искам да кажа, използвано ли е името като охлюв, за да се отпечата приятелско име за марката? В този случай името трябва да бъде добавено към 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,}')
);

(и накрая маршрут за /марки)

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

След това проверете за $this->params['id'] и $this->params['name'] в контролера. Ако е необходимо, пренасочете към правилния url (ако страницата е същата и искате винаги да имате името в url, което е добре за SEO).

person Oscar    schedule 17.07.2010
comment
но трябва да е по избор...ако маршрутизирам по този начин, когато се опитам да осъществя достъп до /марки/, ще изведа грешка........ - person RSK; 19.07.2010
comment
Актуализира отговора. Имате нужда от един допълнителен маршрут за достъп до /марки. - person Oscar; 22.07.2010

Посочете втори маршрут, като пропуснете незадължителните параметри.

person sibidiba    schedule 17.07.2010