Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.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
Php Codeigniter-路由到控制器(如果存在),如果不存在,则使用dafault_Php_Codeigniter - Fatal编程技术网

Php Codeigniter-路由到控制器(如果存在),如果不存在,则使用dafault

Php Codeigniter-路由到控制器(如果存在),如果不存在,则使用dafault,php,codeigniter,Php,Codeigniter,因此,我设置了如下路线: $route[':any'] = "main"; $route['products/(:any)'] = "products/product/$1"; 例如,www.mysite.com/something转到主控制器,在那里我处理“something”。 我以类似的方式处理产品 但正如你看到的那样,我必须写下所有其他控制器,以及我希望使用的方法,而不是主控制器。有没有办法让它自动检测控制器是否存在使用控制器而不是默认的“main” $route['products'

因此,我设置了如下路线:

$route[':any'] = "main";
$route['products/(:any)'] = "products/product/$1";
例如,www.mysite.com/something转到主控制器,在那里我处理“something”。 我以类似的方式处理产品

但正如你看到的那样,我必须写下所有其他控制器,以及我希望使用的方法,而不是主控制器。有没有办法让它自动检测控制器是否存在使用控制器而不是默认的“main”

$route['products'] = "products";
$route['admin/user/login'] = "admin/user/login";
$route['admin/user/logout'] = "admin/user/logout";
$route['admin/migrations'] = "admin/migrations";
$route['admin/dashboard'] = "admin/dashboard";

由于我在某个博客上找到了它,所以我无法对此进行任何评价,但我在我的routes.php中使用了以下代码,在您的情况下,我会将其放在
$route[':any']=“main”上方


如果我需要覆盖它们中的任何一个,或者有任何独特的路由,我会将它们放在routes.php文件的顶部,在这段代码的上方。

我不能相信这一点,因为我在某个博客上找到了它,但我在routes.php中使用了以下代码,在您的情况下,我会将其放在
$route[':any']=“main”上方


如果我需要覆盖它们中的任何一个,或者有任何唯一的路由,我会将它们放在routes.php文件的顶部,在这段代码的上方。

感谢Jeemsu,它似乎可以工作-我编辑了您的答案,为controller/method和controller/method/var1添加路由。尽管它能工作,但它似乎有点粗糙。。无论如何,再次谢谢你@Petah-我们又来了:)嗨,为什么不使用这个$route['404_override']='notfound';创建notfound控制器,使所有代码变得简单和灵活。@wasim对我来说似乎有点不成熟,为什么要使用专门用于捕获404错误的路由来路由所有应用程序逻辑?实际上,如果找不到控制器,那么在逻辑上我们应该在404中重写,这样我们就可以像控制器一样,若找不到控制器,但URL是废话废话,那个么做其他废话404。。。所以我们仍然控制着404。除此之外,它比使用定制PHP更方便。404“一网打尽”应该是最后的选择。将所有路由保存在routes.php中是合乎逻辑的,当开发人员接近其他人的codeigniter项目时,我希望在这里找到它们。最后,做你认为最合乎逻辑的事情,每个人都有自己的开发方法。感谢Jeemsu,这似乎有效-我编辑了你的答案,为controller/method和controller/method/var1添加了路径。尽管它能工作,但它似乎有点粗糙。。无论如何,再次谢谢你@Petah-我们又来了:)嗨,为什么不使用这个$route['404_override']='notfound';创建notfound控制器,使所有代码变得简单和灵活。@wasim对我来说似乎有点不成熟,为什么要使用专门用于捕获404错误的路由来路由所有应用程序逻辑?实际上,如果找不到控制器,那么在逻辑上我们应该在404中重写,这样我们就可以像控制器一样,若找不到控制器,但URL是废话废话,那个么做其他废话404。。。所以我们仍然控制着404。除此之外,它比使用定制PHP更方便。404“一网打尽”应该是最后的选择。将所有路由保存在routes.php中是合乎逻辑的,当开发人员接近其他人的codeigniter项目时,我希望在这里找到它们。最后,做你认为最合乎逻辑的事情,每个人都有自己的发展方法。
$controller_dir = opendir(APPPATH."controllers");

while (($file = readdir($controller_dir)) !== false) {

    if (substr($file, -4) == ".php" ) {

        $route[substr($file, 0, -4)."(.*)"] = substr($file, 0, -4)."$1";

    } elseif (substr($file, -5) == ".php/") {

        $route[substr($file, 0, -5)."(.*)"] = substr($file, 0, -5)."$1";

    }
}