CakePHP路由没有前缀

时间:2014-10-22 10:47:37

标签: cakephp

CakePHP 2.5路由上是否可以没有前缀?

我们正在努力实现一种<domain>/<username>类型路线,该路线将路由到标准的蛋糕网址<domain>/users/view/XX。类似于Twitter URL结构,虽然我不确定零前缀路由是否可行。如果是,它是否会破坏其他模型的标准Cake路由?

<domain>/users/view/1效果很好。

我可以像这样添加一个路由到routes.php,这会稍微缩短网址,

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

似乎可以正常工作,但它会禁用Cake默认路由。

1 个答案:

答案 0 :(得分: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/*');