【问题标题】:Cakephp Site Root with username conflict with controllers用户名与控制器冲突的 Cakephp 站点根目录
【发布时间】:2015-01-21 08:49:32
【问题描述】:

我得到了这段代码。 当我转到 domain.com/ 时,它将路由到 home->index()。当我输入 domain.com/username.. 它会路由到 users->view(username)

文件:config/routes.php

$controllerList = App::objects('Controller'); 

foreach($controllerList as $controller)
{
    $controllerName = str_replace('Controller', '', $controller);
    if($controllerName != "App" & $controllerName != "Pages")
    {
        Router::connect('/' . $controllerName . '/:action/*', array('controller' => $controllerName));

        $firstLetterLower = strtolower(substr($controllerName,0,1));
        $lowerCaseName = $firstLetterLower . substr($controllerName,1);

        Router::connect('/' . $lowerCaseName . '/:action/*', array('controller' => $lowerCaseName));

    }
}
Router::connect('/:username', array('controller' => 'users', 'action' => 'views'), array('pass' => array('username')));
Router::connect('/', array('controller' => 'home', 'action' => 'index'));

问题是我无法在不执行操作的情况下路由我的控制器 domain.com/controller..

这将起作用:domain.com/blog/indexdomain.com/forum/indexdomain.com/users/login >

这不起作用:domain.com/blog它将被视为用户名

【问题讨论】:

    标签: cakephp controller routing url-routing


    【解决方案1】:

    在用户名路由中排除匹配的控制器名称。你应该有一个他们的列表,以防止人们使用这些名字注册。

    【讨论】:

    • 我编辑了帖子.. 得到了遍历可用控制器的代码.. 仍然会将其视为用户名....
    【解决方案2】:

    把你的代码写成这样。这不会将博客视为用户名

    Router::connect('/', array('controller' => 'home', 'action' => 'index'));
    Router::connect('/blog', array('controller' => 'blog', 'action' => 'index'));
    Router::connect('/:username', array('controller' => 'users', 'action' => 'views'), array('pass' => array('username')));
    

    谢谢..!

    【讨论】:

      猜你喜欢
      • 2013-11-06
      • 2014-10-13
      • 2014-01-28
      • 1970-01-01
      • 1970-01-01
      • 2018-02-28
      • 1970-01-01
      • 2016-06-18
      • 2011-08-17
      相关资源
      最近更新 更多