2014-10-22 75 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/*');