【问题标题】:What is the best way to implement a controller in PHP?在 PHP 中实现控制器的最佳方法是什么?
【发布时间】:2009-12-17 15:23:00
【问题描述】:

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

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

它有效,但我想知道它是否有点 hacky,或者只是公认的做事方式。有没有更好的办法?我不要框架,我要自己学着做。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 我还在准备一篇关于它的博客文章,但基本用法是 index.php 加载 Home->index(),index.php?c=Blog 加载 Blog->index()和 index.php?cBlog&m=otherpage&id=1 加载 Blog->otherpage($params) , $params['id'] 返回 1. :-)
    【解决方案2】:

    通过单一入口点传递所有内容,例如index.php 不是 MVC,它是 FrontController 模式。不过,这与 MVC 配合得很好。请参阅我的相关@​​987654321@。

    除此之外,何不看看周围的一些框架,了解它们是如何做到的。并不意味着你必须使用它们,只需查看它们的代码并适应你自己的框架即可。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          大多数 PHP 框架使用 mod_rewrite 确实实现了相同的目标,这是抑制 index.php 并使 url 更友好的唯一方法,以分段的方式。

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

          您使用的那个方法称为FrontController Pattern,这些框架也使用它来配合MVC 模式。

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

          【讨论】:

            猜你喜欢
            • 2020-01-15
            • 1970-01-01
            • 2018-08-30
            • 1970-01-01
            • 2011-05-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多