2014-10-22 2 views
0

Возможно ли иметь префикс на CakePHP 2.5 маршрутах?Маршрутизация CakePHP без префикса

Мы пытаемся достичь маршрута типа <domain>/<username>, где будет курсировать до стандартного торта Cake, например <domain>/users/view/XX. Подобно структуре URL-адреса Twitter, хотя я не уверен, что маршрут с нулевым префиксом возможен. Если да, то это также нарушит стандартную маршрутизацию торта для других моделей?

<domain>/users/view/1 работает нормально.

Я могу добавить маршрут к routes.php так, что несколько сокращает URL,

Router::connect(
    '/u/*', 
    array('controller' => 'users', 'action' => 'view_by_slug') 
); 

Однако нам интересно, если это возможно, чтобы сократить его еще больше и достичь префикса <domain>/<username> типа.

Edit: Для полноты здесь тока view_by_slug() контроллер

public function view_by_slug($slug = null) {  
     $user = $this->User->findBySlug($slug); 
     debug($user); 

     if (!$user) { 
      throw new NotFoundException(__('Invalid user')); 
     } 
    } 

Users.slug в базе данных является VARCHAR (255)

Router::connect(
    '/*', array('controller' => 'users', 'action' => 'view_by_slug') 
); 

Кажется, работает, однако он отключает Cake по умолчанию маршрутизации.

+1

Хорошая идея, если вы не используете ссылки, такие как domain.com/account, domain.com/messages, domain.com/login и т. д. Если вы это сделаете, вам нужно будет указать пользователям при регистрации, что они не могут использовать определенные имена пользователей, и это может быть очень длинный список. Ответ HelloSpeakman должен работать. – bowlerae

ответ

0

Вы могли бы попробовать что-то вроде следующего (непроверенные, но он должен работать)

Router::connect('/:slug/', 
    array('controller' => 'users', 'action' => 'view_by_slug'), 
    array('slug' => '[a-z0-9-]+', 'pass' => array('slug')) 
); 

Router::connect('/:slug/controller', array('action' => 'index')); 
Router::connect('/:slug/controller/*'); 
Смежные вопросы