在PHP中实现控制器的最佳方法是什么?

时间:2009-12-17 15:23:01

标签: php model-view-controller mod-rewrite

在我制作的最后几个网站中,我认为我实现了一种MVC风格的控制器。

我使用mod_rewrite通过index.php发送所有内容,因此url成为查询字符串。

它有效,但我想知道它是否有点hacky,或者只是被接受的做事方式。有没有更好的办法?我不想要一个框架,我想学会自己做。

5 个答案:

答案 0 :(得分:8)

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

<?php
$g=$_GET;$c=@$g['c']?$g['c']:'Home';
if(!@include"c/$c.php")die('fail');
$m=method_exists($c,$m=@$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!";
    }

主要是作为一个笑话,因为我想制作一个可以放在推文中的框架,但基本逻辑就在那里; - )

答案 1 :(得分:2)

通过单一入口点传递所有内容,例如: index.php不是MVC,它是FrontController模式。这与MVC相关。请参阅我的相关answer here

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

大多数PHP框架都使用mod_rewrite来实现相同的目标,这是压缩index.php和以分段方式使URL更友好的唯一方法。

我说你走的是正确的道路。

您使用的方法称为 FrontController Pattern ,并且这些框架也使用它,以配合MVC模式。

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