2013-03-01 53 views
2

所以我已经建立了我的路线,像这样:笨 - 路由控制器,如果它存在,如果不使用dafault

$route[':any'] = "main"; 
$route['products/(:any)'] = "products/product/$1"; 

例如www.mysite.com/something进入主控制器,我在那里处理“东西”。 我以类似的方式处理产品。

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

$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"; 

回答

4

我不能采取任何它的信用,因为我发现它在博客上的某个地方,但我用下面的代码在我的routes.php文件,你的情况我会放在它上面的$route[':any'] = "main";

$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"; 

    } 
} 

我是否需要覆盖它们中的任何一个,或者是否有任何唯一路由,我将它们放在routes.php文件的顶部,位于此代码的上方。

+0

谢谢Jeemsu似乎工作 - 我编辑你的答案添加控制器/方法和控制器/方法/ var1的路线。即使它有效,它似乎有点hacky ..无论如何再次感谢。 @Petah - 这里我们再去:) – fjckls 2013-03-01 10:08:56

+0

嗨,为什么不用这个$ route ['404_override'] ='notfound';并创建notfound控制器并使所有代码简单灵活。 – 2016-03-21 05:07:58

+0

@wasim对我来说似乎有点冒失,为什么使用专门用于捕获404错误的路由来路由所有应用程序逻辑? – Jeemusu 2016-03-22 01:23:44