Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用户名与控制器冲突的Cakephp站点根目录_Cakephp_Controller_Routing_Url Routing - Fatal编程技术网

用户名与控制器冲突的Cakephp站点根目录

用户名与控制器冲突的Cakephp站点根目录,cakephp,controller,routing,url-routing,Cakephp,Controller,Routing,Url Routing,我让这个代码工作了。 当我进入domain.com/时,它将路由到home->index。当我输入domain.com/username。。它将路由到用户->查看用户名 文件:config/routes.php $controllerList = App::objects('Controller'); foreach($controllerList as $controller) { $controllerName = str_replace('Controller', '', $c

我让这个代码工作了。 当我进入domain.com/时,它将路由到home->index。当我输入domain.com/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/index、domain.com/forum/index、domain.com/users/login


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

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

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

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

谢谢

我编辑了这篇文章。。获取了遍历可用控制器的代码。。但它仍会将其视为用户名。。。。