用php前端控制器动态路由

时间:2011-10-07 22:09:05

标签: php front-controller

我正在尝试从URL获取控件名称,并在index.php中动态地将其与正确的控制器匹配。

我的应用根:/localhost/app/index.php

所以基本上当我输入/localhost/app/index.php/home时,试图加入home_controller.php。 这是代码;

 $parts = array_slice(explode('/',$_SERVER["REQUEST_URI"]),3);
 if(file_exists(dirname(__FILE__)."/controllers/".$parts[0].'_controller.php'))
 {
    include dirname(__FILE__)."/controllers/".$parts[0].'_controller.php';
 }

如果应用程序根深度为3,它可以正常工作。当我更改app目录时它会被破坏 本地主机/第一/第二/应用程序/ index.php的/家

因为它被3爆炸,$ parts [0]不再是“家” 问题是如何以更有效的方式检测控制器部件?

2 个答案:

答案 0 :(得分:0)

/localhost/app/index.php/home 本地主机/第一/二/应用/ index.php文件/家 听起来像它使你的字符串$ parts [0]片看起来像app / index.php / home这将是一个无效的路径。处理此问题的唯一方法是使用/作为分隔符来爆炸该字符串,或者使用数组中的最后一个作为比较或运行每个字符串的位置。 MVC的概念虽然是URL总是结构相似的第一部分,在这种情况下需要确定控制器,2+通常用于参考控制器中的函数参数

答案 1 :(得分:0)

我使用$ _SERVER paht_info变量来计算,控制器部分..

  $segments = array_slice(explode("/", $_SERVER["PATH_INFO"] ),1);

$ segment数组的零索引是控制器部分,其他部分是函数。 顺便说一下,你需要检查数组边界以及是否设置了path_info。