在我做的最后几个网站中,我认为我实现了一种MVC风格的控制器。在PHP中实现控制器的最佳方式是什么?
我用mod_rewrite
通过index.php发送所有东西,所以url变成了查询字符串。
它的工作,但我想知道这是否有点hacky,或只是公认的做事方式。有没有更好的办法?我不想要一个框架,我想学习自己做。
在我做的最后几个网站中,我认为我实现了一种MVC风格的控制器。在PHP中实现控制器的最佳方式是什么?
我用mod_rewrite
通过index.php发送所有东西,所以url变成了查询字符串。
它的工作,但我想知道这是否有点hacky,或只是公认的做事方式。有没有更好的办法?我不想要一个框架,我想学习自己做。
尝试我在世界上最小的框架。
<?php
$g=$_GET;[email protected]$g['c']?$g['c']:'Home';
if([email protected]"c/$c.php")die('fail');
$m=method_exists($c,[email protected]$g['m'])?$m:'index';
$o=new$c();$o->$m($g);
这在index.php中,你的控件是在./c/Blog.php中的Blog.php。
class Blog {
function index()
{
echo "Hello world";
}
function otherpage()
{
echo "ZOMG!";
}
主要由作为一个笑话,因为我想作一个框架,可以适应在鸣叫,但基本的逻辑是有;-)
这就是我完成它的方式。然后我创建了一个新的基于URL的调度表,该控制器实例化以及运行哪个调度。
将所有内容通过单个输入点(例如, index.php不是MVC,它是FrontController模式。尽管这与MVC很好。看到我的相关answer here。
除此之外,为什么不查看一些框架来了解他们是如何做到的。并不意味着你必须使用它们,只要看看它们的代码并适应你自己的框架。
关于学习做自己怎么样,但仍使用框架?无论哪种方式,请看看像Symfony或CMS应用程序的开源框架,如Wordpress,Jommla!等等,你会发现他们都使用mod_rewrite来设置。
大多数PHP框架都使用mod_rewrite完成相同的目标,并且它是以分段方式压制index.php并使url更友好的唯一方法。
我会说你是在正确的道路上。
您使用的方法称为FrontController Pattern,并且它也被这些框架用于与MVC模式一起使用。
如果您关心一个建议,我建议您通过每个页面控制器来传递每个请求,扩展一个基本控制器,因为每个站点都有一些基本数据结构,您可能需要在每个页面中使用这些基础数据结构,如模板和会话控制。
做了我的一天:D +1 – yoda 2009-12-17 15:35:28
这真的很棒:) – Skilldrick 2009-12-17 15:36:16
我还在准备一篇关于它的博客文章,但基本的用法是index.php加载Home-> index(),index.php?c = Blog加载Blog-> index()和index.php?cBlog&m = otherpage&id = 1用$ params ['id']加载Blog-> otherpage($ params)返回1. :-) – 2009-12-17 15:41:29