2014-10-22 108 views
0

CakePHP 2.5路由可能沒有前綴嗎?不帶前綴的CakePHP路由

我們正在嘗試實現<domain>/<username>類型的路由,其中​​路由到標準的Cake url,如<domain>/users/view/XX。類似於Twitter的URL結構,儘管我不確定零前綴路由是否可能。如果是這樣,它是否也會打破其他模型的標準Cake路由?

<domain>/users/view/1工作正常。

但是我們想知道我可以添加到routes.php文件這樣的路線,略微縮短的URL,

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

如果能夠更加縮短,實現了<domain>/<username>類型前綴。

編輯:爲了完整這裏是當前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') 
); 

似乎工作,但它會禁用默認蛋糕路由。

+1

如果你不使用等環節的domain.com/account,domain.com/messages好主意,domain.com /登錄等。如果你這樣做,你需要在註冊時指定用戶不能使用某些用戶名,這可能是一個很長的名單。 HelloSpeakman的答案應該可以工作。 – bowlerae 2014-10-22 14:08:13

回答

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/*');