2009-12-17 116 views
0

在我做的最后几个网站中,我认为我实现了一种MVC风格的控制器。在PHP中实现控制器的最佳方式是什么?

我用mod_rewrite通过index.php发送所有东西,所以url变成了查询字符串。

它的工作,但我想知道这是否有点hacky,或只是公认的做事方式。有没有更好的办法?我不想要一个框架,我想学习自己做。

回答

8

尝试我在世界上最小的框架。

<?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!"; 
    } 

主要由作为一个笑话,因为我想作一个框架,可以适应在鸣叫,但基本的逻辑是有;-)

+0

做了我的一天:D +1 – yoda 2009-12-17 15:35:28

+0

这真的很棒:) – Skilldrick 2009-12-17 15:36:16

+0

我还在准备一篇关于它的博客文章,但基本的用法是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

1

这就是我完成它的方式。然后我创建了一个新的基于URL的调度表,该控制器实例化以及运行哪个调度。

2

将所有内容通过单个输入点(例如, index.php不是MVC,它是FrontController模式。尽管这与MVC很好。看到我的相关answer here

除此之外,为什么不查看一些框架来了解他们是如何做到的。并不意味着你必须使用它们,只要看看它们的代码并适应你自己的框架。

1

关于学习做自己怎么样,但仍使用框架?无论哪种方式,请看看像Symfony或CMS应用程序的开源框架,如Wordpress,Jommla!等等,你会发现他们都使用mod_rewrite来设置。

1

大多数PHP框架都使用mod_rewrite完成相同的目标,并且它是以分段方式压制index.php并使url更友好的唯一方法。

我会说你是在正确的道路上。

您使用的方法称为FrontController Pattern,并且它也被这些框架用于与MVC模式一起使用。

如果您关心一个建议,我建议您通过每个页面控制器来传递每个请求,扩展一个基本控制器,因为每个站点都有一些基本数据结构,您可能需要在每个页面中使用这些基础数据结构,如模板和会话控制。

相关问题