【问题标题】:Username in URL using Regex & Route使用正则表达式和路由的 URL 中的用户名
【发布时间】:2012-06-04 13:16:33
【问题描述】:

我的用户控制器中有一个名为 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])+$'));

【问题讨论】:

    标签: regex cakephp routes


    【解决方案1】:

    不幸的是,这种使用/: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) {
    
    }
    

    【讨论】:

    • 哦,这太过分了,我想我可以没有它。不管怎么说,多谢拉。我的另一个问题是如何实现以下目标:www​​.example.com/user/username。我试过这个:Router::connect('/user/*', array('controller' => 'users', 'action' => 'view')); 但我收到以下错误:Error: The requested address '/cakephp/user/FakeHeal' was not found on this server.
    • 仍然得到这个Error: The requested address '/cakephp/user/FakeHeal' was not found on this server. 另外我们为什么要通过正则表达式?
    • @FakeHeal 为什么前面有 /cakephp?听起来它甚至没有进入 CakePHP,默认路由是否有效? (/控制器/动作)
    • localhost 我有一个文件夹 cakephp。当我尝试控制器/动作 - 默认路由时,我得到同样的错误:Error: The requested address '/cakephp/users/view/fakeheal' was not found on this server.
    • 那你的环境有问题需要先解决,如果默认的不行,我没法帮你自定义路由!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 2014-06-12
    • 1970-01-01
    • 2016-10-10
    • 1970-01-01
    相关资源
    最近更新 更多