模型视图控制器-挂接PHP运行时


model view controller - Hooking the PHP Runtime

php.info(或其他配置文件)中是否有任何方法可以指示每次调用php时都要运行的脚本?

我感兴趣的是将特定页面的HTTP请求映射到表示该页面的Controller类,类似于许多MVC框架(如CI)的工作方式。

例如,用户单击一个链接,该链接应该映射到/webroot/some/url/widget.php,但调用的却是/webroot/app/mvc/controllers/WidgetController.php类。

为了做到这一点,我认为像CI这样的MVC框架已经找到了一种"挂钩"PHP运行时的方法,方法是运行一个脚本,并说"哦,请求是针对widget.PHP的,但我们想实际运行WidgetController.PHP对象。"

有什么想法/想法/建议/顾虑吗?

谢谢!

我认为你可能是这里的错误线索。Zend Framework和我认识的其他Framework使用mod_rewrite或类似技术重定向请求,然后由某种Front Controller处理请求。

这意味着Apache(而不是PHP)将您对example.org/mypage的请求重定向到myfrontcontroller.PHP,然后由它决定如何处理传入的请求。

您要查找的是php.ini选项auto_prepend_file

您需要一个路由器和apache mod_rewrite或等效程序。您设置mod_rewrite将所有请求发送到单个文件,如/index.php。然后路由器查看请求URL,并确定要加载哪个控制器文件和调用哪个方法。几乎任何MVC框架都内置了这一功能,而且它们的工作原理基本相同。

webroot中的index.php应该足够了,路径将作为服务器变量PATH_INFO传递。

参见http://us3.php.net/manual/en/ini.core.php#ini.auto-prepend-file

编辑:我的答案只是一个仅供参考。正如其他人所提到的,mod_rewrite是公认的解决问题的方法。