我试图从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,它可以正常工作。当我更改应用程序目录时,它坏了localhost/一/二/app/index . php/home
因为是3,$parts[0]不再是"home"问题是我如何以更有效的方式检测控制器部分?
我使用$_SERVER paht_info变量来计算,控制器部分..
$segments = array_slice(explode("/", $_SERVER["PATH_INFO"] ),1);
$segment数组的零索引为控制器部分,其他部分为函数部分。顺便说一句,你需要检查数组边界和是否设置了path_info。
/localhost/app/index.php/homelocalhost/一/二/app/index . php/回家听起来它使字符串$parts[0]看起来像app/index.php/home,这将是一个无效的路径。处理这个问题的唯一方法是使用/作为分隔符爆炸字符串,或者使用数组中的最后一个作为比较或遍历每个字符串的位置。MVC的概念是URL的结构总是相似的第一部分,home在这种情况下需要确定控制器,2+通常用于引用参数从控制器到函数