URL中的用户名使用Regex&路线

时间:2012-05-30 09:56:56

标签: regex cakephp routes

我的用户控制器中有一个名为view的方法,该方法应显示指定的(按URL)用户:

public function view($username = null) {
    $this->User->username = $username;

    if (!$this->User->exists()) {
        throw new NotFoundException('Няма такъв потребител!');
    }

    if (!$username) {
        $this->Session->setFlash('Няма такъв потребител!');
        $this->redirect(array('action' => 'index'));
    }
    $this->set('user', $this->User->read());
}

在路线配置中:

    Router::connect('/:username',   array('controller' => 'users', 'action'=> 'view'), array('username' => '^([a-z0-9])+$'));

但是当我尝试:www.example.com/Username时,它会返回致命错误:缺少控制器。

我也尝试了这个:

Router::connect('/users/:username', array('controller' => 'users', 'action'=> 'view'), array('pass' => array('username'), 'username' => '^([a-z0-9])+$'));

1 个答案:

答案 0 :(得分:2)

不幸的是,对于使用/:username的这种设置太简单了,它几乎会覆盖每一条其他路径。要有效地执行此操作(+正确的CakePHP方式),您需要设置自定义路由here is mine which pretty much achieves the same thing。在大多数情况下,只需将“产品”替换为“用户”,然后仔细阅读,以确保您了解正在发生的事情......

如果你仍然无法解决问题,请查看我的路线配置。

如果您想将 / user / dunhamzz 路由到个人资料,请将其设置为:

Router::connect('/user/:username',
    array('controller' => 'users', 'action' => 'view'),
    array('pass' => array('username')
);

然后您的视图操作只会将用户名作为第一个参数:

public function view($username) {

}