【问题标题】:CakePHP routing with no prefixCakePHP 无前缀路由
【发布时间】:2014-12-17 19:13:05
【问题描述】:

CakePHP 2.5 路由可以没有前缀吗?

我们正在尝试实现<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')
);

似乎可以工作,但是它禁用了 Cake 默认路由。

【问题讨论】:

  • 如果您不使用 domain.com/account、domain.com/messages、domain.com/login 等链接,这是个好主意。如果您这样做,您需要在注册他们不能使用某些用户名,这可能是一个很长的列表。不过,HelloSpeakman 的回答应该有效。

标签: cakephp


【解决方案1】:

您可以尝试以下方法(未经测试,但应该可以)

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

【讨论】:

    猜你喜欢
    • 2011-06-09
    • 2013-10-09
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    • 2014-02-19
    相关资源
    最近更新 更多