【问题标题】:when to use MVC on PHP?什么时候在 PHP 上使用 MVC?
【发布时间】:2010-07-30 18:23:30
【问题描述】:

好吧,我想我把自己推到了这里,我正在自己的 MVC 中创建一个项目,即使我不知道 MVS 本身是什么,

<?php    

class init
    {
        function __construct()
        {
            $this->enviroment();
            $this->start();
        }

        function enviroment()
        {
            /* Required Classes */  
            require_once( ROOTPATH . BOOTSTRAP . REDENGINE . '/class.debug.php');
            require_once( ROOTPATH . BOOTSTRAP . REDENGINE . '/class.theme.php');
            require_once( ROOTPATH . BOOTSTRAP . REDENGINE . '/class.url.php');
            require_once( ROOTPATH . BOOTSTRAP . REDENGINE . '/language/class.lang.php');
            require_once( ROOTPATH . BOOTSTRAP . REDENGINE . '/class.sessions.php');
        }
        function start()
        {   
            /* Start Classes */
            $uSys = new Urlsystem;
            $fragments = $uSys->getFragments();
            $tSys = new ThemeSystem;
            $lSys = new LanguageSystem;
            $sSys = new Sessions;   

            /* defineing APPVIEWS & APPCONTROLLER */        
            define( 'APPVIEWS', '/appviews' );
            define( 'APPCONTROLLER', '/appcontroller' );

            if ( empty($fragments) )
            {
                require_once( ROOTPATH . APPCONTROLLER . '/app.home.php'); /* default app controller page */
                require_once( ROOTPATH . APPVIEWS . '/view.home.php'); /* default app views page */
            }

            if ( !empty($fragments) )
            {
                // Start ENGINE
                if ( !file_exists(ROOTPATH . APPCONTROLLER . '/app' . $fragments . '.php') &&
                     !file_exists(ROOTPATH . APPVIEWS . '/view' . $fragments. '.php')
                ) {

                            if ( file_exists(ROOTPATH . APPCONTROLLER . '/app.404.php') &&
                                 file_exists(ROOTPATH . APPVIEWS . '/view.404.php')
                             ) {
                                require ROOTPATH . APPCONTROLLER . '/app.404.php';
                                require ROOTPATH . APPVIEWS . '/view.404.php';
                            }
                            else {
                                echo "NO 404 APP || VIEW";
                            }
                }           
                if ( file_exists(ROOTPATH . APPCONTROLLER . '/app' .  $fragments . '.php') ) 
                {
                    require ROOTPATH . APPCONTROLLER . '/app' . $fragments . '.php'; // load application

                    if ( file_exists(ROOTPATH . APPVIEWS . '/view' .  $fragments . '.php') ) {
                        require ROOTPATH . APPVIEWS . '/view' .  $fragments . '.php';// load view
                    } 
                }
                // End ENGINE
            }       
        }
    } ?>

好的,正如你看到我的前端控制器,所以我知道它失败了,我只是在我几乎完成我的项目后才注意到我的失败,特别是当我需要做 www.someurl.com/?$getuserwww.someurl.com/myname 或用户。

无论如何,我的问题是我们什么时候真正需要 MVC for PHP?

我在看脸书等

他们仍然使用 ?this=blabla get 所以他们不是 MVC ,对吗?无论如何,我仍然对 facebook 如何在没有它的情况下 www.facebook.com/myname 感到困惑。 (htaccess ?)

如果他们不使用 MVC,那么我们什么时候真正需要它?

注意:

我已经阅读了很多关于何时使用 MVC 的帖子,但我没有在我的问题中找到一个,如果有请留下评论以便我阅读:)

非常感谢。

【问题讨论】:

  • 希望你得到你需要的答案。
  • yup 仍然很困惑,关于在使用实用风格(旧编程风格)时使用 mvc 时,比如包含控制器视图(在一个文件中)。可能要等 2 天或更长时间:| .顺便说一句,AJ 的答案很好。只是需要一些时间。
  • 谢谢。非常感谢您的赞赏。 :)
  • 不是你要感谢的人:)

标签: php model-view-controller


【解决方案1】:

我相信您对 MVC 和拥有 RESTful URL scheme (http://en.wikipedia.org/wiki/Representational_State_Transfer#RESTful_web_services) 感到困惑。

MVC 只是一种将实体和模块分开的编码模式。就像来自 GUI 模板的应用程序逻辑,而 URL 模式则完全不同。 URL 仅用于访问 Web 资源。如果您不使用 .htaccess 解决问题,像 CodeIgnitor 这样的 MVC 框架仍然可以为您提供“丑陋”的 URL

【讨论】:

  • 我想我忘了提到 mod_rewrite 但其他人已经这样做了。
【解决方案2】:

MVC 是一种专注于关注点分离的架构模式; URL 与它无关。

URL 由服务器处理。如果您使用的是 Apache,请设置 mod_rewrite。

话虽如此,您可能不想重新发明轮子,但看看那里可用的选项,有很多面向 MVC 的 PHP 框架。找到一个你喜欢的并且可以高效使用并使用它。

【讨论】:

  • 在使用为您完成它的框架之前,了解 MVC 是什么以及它是如何工作的会有所帮助。实现一个简单的 MVC 模式是了解其工作原理的好方法,imo。
【解决方案3】:

我认为您将 MVC 与查询参数混淆了。两者不一定相关,尽管更流行的 PHP MVC 框架确实通过使用 mod_rewrite 或等效方法来屏蔽参数。

MVC 只是一种将表示逻辑与业务逻辑分开的方法。可以这样想:如果你有一个使用 MVC 的网站,你可以很容易地创建一个手机版本,只需根据浏览器更改视图,你的网站的逻辑不需要更改,只需发送到的 HTML客户。

【讨论】:

    【解决方案4】:

    您的问题似乎将两个不同的主题混淆在一起。模型视图控制器(MVC)和漂亮的 URL。

    模型视图控制器是一种设计范式,它允许您分离逻辑(模型)、模板(视图)和指导输入/输出(控制器)。

    Pretty URLs另一方面,允许基于格式规则(通常是 .htaccess 规则)重定向 url。

    Model-View-Controller - 设计范式信息。

    Pretty URLs tutorial - 使用 Apache 的 mod_rewrite 的实现。

    mod_rewrite - 关于什么是重写引擎的信息。

    【讨论】:

    • MVC 是一种很好的使用模式,原因有很多,尽管从头开始创建自己的模式可能不是最好的方法。我想说看看流行的 PHP 框架,看看它们是如何解决您面临的问题的。 framework.zend.comcakephp.orgsymfony-project.org 都是非常流行的框架。
    【解决方案5】:

    将代码、HTML 和数据保存在不同的文件夹中是构建应用程序的最基本方式——这也是实现 MVC 的主要原因:组织。

    大多数框架中存在的其他设计模式是 MVC 的补充,它们促进了代码重用、快速开发等。但即使没有 MVC,您也可以做到后者——只需要一个代码库!大多数框架都使用 MVC 设计模式,但 MVC != 框架。

    某些框架需要您调整 Apache(Lighty、Nginx 等)以使其成为框架扩展。漂亮的 URL 只是呈现控制器使用的输入数据(视图)的一种方式,因此后者可以路由到适当的处理程序。从这个角度来看,.htaccess 是此类框架的 MVC 不可或缺的一部分。

    在深入研究项目之前,多做一些研究会有所帮助。大多数框架都对 MVC 采取了复杂的方法,这导致了许多人的困惑。 Fat-Free Framework 使用更直接和更容易遵循的路径。

    【讨论】:

    • 喜欢 f3。我们可以称之为 mvc 吗?
    【解决方案6】:

    您可以考虑从使用许多不同的 MVC 框架之一开始,例如 CodeIgnitercakePHP。这些框架已经由许多人开发并经过一段时间的改进。 MVC 不是必需的,但是一旦建立了样板,创建 Web 应用程序非常快。

    【讨论】:

    • 我同意这一点。使用 cakePHP 隐藏了许多您不必担心的事情,因此您可以完成工作。
    【解决方案7】:

    什么时候使用...一直是个好习惯。

    就我个人而言,我的选择是:Symphone 和 Doctrine 可以更轻松地由团队编写大型应用程序。但从 CodeIgniter 开始。

    【讨论】:

    • PHP 框架被称为“Symfony”,实际单词是“Symphony”。
    • 你确定一直都在吗?嗯 facebook 仍然使用 www.facebook.com/editprofile.php 所以我认为它们不是 mvc ? ,也许是因为 hiphop 编译器?好吧,也许我很愚蠢。
    • 我讲讲web开发的原理。我很确定他们使用 Control-Model-View 分离。
    【解决方案8】:

    尝试编写自己的 mvc 确实让自己很难受。 (您不是通过操纵 URL 方案来做到这一点的)。虽然自己编写一个很好的教育体验,但通过重新发明轮子,您将无法获得 MVC 模式的质量水平和好处。

    用 symfony、zend、codeigniter cake 或任何优秀的开源 MVC 框架编写您的应用程序。当您对它的工作原理有所了解时,您应该创建自己的乐趣。

    这些框架的存在是为了让您的项目更快地编写代码并且更易于维护。

    【讨论】:

    • :| ,顺便说一句,真的需要吗?我什么时候可以知道什么时候真正需要 mvc?
    • @Adam Ramadhan MVC 是一种设计模式。每种设计模式都有其自己的理论用途,实现细节通常会在某些方面与该模式有所不同。了解您是否会从 MVC 中受益的唯一方法是了解 MVC 是什么以及它与您的项目的关系。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-01
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 2011-03-21
    • 2016-09-24
    相关资源
    最近更新 更多