[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Kohana
Stasonix
Напр. имеется такие роут и урл

http://mysite/test/article-1


и

// Route on Test    
Route::set('Test', 'test/<alias>',array('alias'=>'\D+'))

это будет работать только для http://mysite/test/article, как сделать это более правильно и так чтобы alias не начинался с цифры?
T1grOK
Цитата (Stasonix @ 31.07.2013 - 09:57)
это будет работать только для http://mysite/test/article

Сомнительно ;) , скорей всего срабатывает другой роут.
Route::set('Test', 'test/<alias>',array('alias'=>'\D+'))

А теперь порассуждай, допустим, что мы попали под эту маску, куда должен обратиться фреймворк? Да никуда, будет вызван ErrorException, сообщая что не определен контроллер.
То есть для роута нужно определить как минимум контроллер
Route::set('Test', 'test/article-<alias>',array('alias'=>'\d+'))
->
defaults(array(
//'directory' => 'directory_name',
'controller' => 'controller_name',
// 'action' => 'action_name'(без префикса action)
));


_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
Stasonix
Route::set('Test', 'test/article-<alias>',array('alias'=>'\d+'))


Как угодно только не так, url может быть и таким: test/ar2-3tickl2-1-abcd, т.е. как угодно лишь бы не test/2 или test/1 и т.п., т.е. не начинался с цифры, потому что это уже как страница идет.
Stasonix
Цитата
То есть для роута нужно определить как минимум контроллер


Так я не про контроллер спрашиваю, поэтому и не написал его.
SoMeOnE
http://kohanaframework.su/advanced/route_p1
может поможет разобраться
Stasonix
SoMeOnE

Ничем оно мне не поможет, вся суть в том чтобы сделать так чтобы

test/art2-abcd-iuasd

вело на контроллер, test и action article, а

test/2 или test/1

вело на тот же контроллер, только action_index ( т.е. там постранично вывод был ).
T1grOK
Кто мешает сделать 2 роута?
Route::set('Test1', 'test/<id>',array('id'=>'\d+'))
->
defaults(array(
'controller' => 'test'
));

Route::set('Test2', 'test/<alias>')
->
defaults(array(
'controller' => 'test',
'action' => 'article'
));


_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
T1grOK
Или если позволяет версия PHP и версия Kohana можно воспользоваться лямбда функциями в роуте.

Route::set('Test', 'test/<uri>')
->
defaults(array(
'controller' => 'test'
))
->
filter(
function(Route $route, $params, $request){
if(!preg_match('/^\d+$/', $params['uri'])){ // (int)$params['uri'] == 0
$params['action'] = 'article';
}
return $params;
}
);


_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
SoMeOnE
Цитата (Stasonix @ 31.07.2013 - 12:35)
SoMeOnE

Ничем оно мне не поможет

Если бы ты попытался разобраться, а не ждал готового ответа то помогла бы
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.