何时在PHP中使用MVC?

8

好的,我觉得我在这里有些过度了,我正在使用自己的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或用户时。

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

我看着Facebook等等

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

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

注意:

我已经阅读了很多关于何时使用MVC的帖子,但我还没有找到我的问题,请留言告诉我,这样我就可以阅读:)

非常感谢。


2
http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller - skaffman
希望你得到了你需要的答案。 - user201788
还是有点困惑,不知道何时使用MVC,何时使用实用主义风格(旧的编程风格),例如在一个文件中包含控制器视图。也许我需要等待两天或更长时间:| 顺便说一句,AJ的回答很好,只是需要一些时间。 - Adam Ramadhan
谢谢。非常感谢您的赞赏。 :) - user201788
不,是你要感谢的 :) - Adam Ramadhan
8个回答

5

我想我忘了提到mod_rewrite,但其他人已经提到了。 - user201788

2

MVC是一种关注关注职责分离的架构模式;URL与此无关。

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

话虽如此,您可能不希望重复造轮子,而是查看现有选项。有很多面向MVC的PHP框架可供选择。找到一个您喜欢且能够提高生产力的框架,并使用它。


在使用为你完成MVC的框架之前,了解MVC是什么以及它如何工作会很有帮助。实现一个简单的MVC模式是理解其工作原理的好方法,我个人认为。 - cbednarski

2
我认为你把MVC和查询参数混淆了。尽管更流行的PHP MVC框架确实通过使用mod_rewrite或类似方法掩盖了参数,但这两者并不一定相互关联。
MVC仅仅是一种将演示逻辑与业务逻辑分开的方法。可以这样理解:如果您的网站使用MVC,只需根据浏览器更改视图,就可以轻松创建移动电话版本,您的网站逻辑不需要更改,只需发送给客户端的HTML即可。

2
似乎您的问题将两个不同的主题混淆在一起了。Model View Controller(MVC)和Pretty URLs。 Model View Controller 是一种设计范例,它允许您将逻辑(模型)、模板(视图)和输入/输出控制器分开。
而另一方面,Pretty URLs 允许基于格式规则(通常是 .htaccess 规则)重定向 URL。 Model-View-Controller - 设计范例信息。 Pretty URLs 教程 - 使用 Apache 的 mod_rewrite 实现。 mod_rewrite - 有关重写引擎的信息。

MVC是一个很好的模式,有许多使用它的理由,但从头开始创建自己的模式可能不是最佳方法。我建议看看流行的PHP框架,了解它们如何处理你所面临的问题。http://framework.zend.com/,http://cakephp.org/和http://www.symfony-project.org/都是非常受欢迎的框架。 - David Young

2
将文本翻译成中文:

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

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

一些框架需要您调整Apache(Lighty、Nginx等)以使其成为框架扩展。美观的URL仅是呈现输入数据(视图),由控制器消耗,以便后者可以路由到适当的处理程序。从这个角度看,.htaccess对于这些框架来说是MVC的一个重要组成部分。

在深入项目之前,进行更多的研究会有所帮助。大多数框架采用了复杂的MVC方法,这导致许多人感到困惑。Fat-Free Framework使用更直接、更易于跟踪的路径。


喜欢 F3。我们可以称之为 MVC 吗? - Adam Ramadhan

1

你可以考虑使用许多不同的MVC框架之一来开始编程,例如 CodeIgnitercakePHP。这些框架由许多人开发并在一段时间内不断改进。MVC不是必需的,但是一旦建立了样板文件,创建Web应用程序就非常快速。


我会同意这个观点。使用cakePHP可以隐藏掉许多不必担心的东西,这样你就可以专注于完成工作。 - speshak

1

何时使用...始终如一,是一个好的实践。

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


(Note: This is simplified Chinese)

PHP框架称为“Symfony”,实际单词是“Symphony”。 - NullUserException
1
我在讲解网站开发原则。我非常确定他们使用控制-模型-视图分离。 - ajile

0

如果你试图编写自己的MVC(而不是通过操作URL方案来实现),那么你真的会让自己变得很难。虽然亲手编写一个MVC是一种很好的教育经验,但你不会获得MVC模式的高质量水平和好处,因为这已经有了现成的轮子。

在Symfony、Zend、CodeIgniter Cake或其他任何优秀的开源MVC框架中编写你的应用程序。当你对它应该如何工作有了感觉后,再去尝试编写自己的MVC。

这些框架存在的目的是为了让你的项目更快速地编码和更易于维护。


返回翻译后的文本:|,顺便问一下,这真的有必要吗?我什么时候才能知道何时需要使用MVC? - Adam Ramadhan
1
@Adam Ramadhan MVC是一种设计模式。每个设计模式都有其自身的理论用途,实现细节通常会在某些方面与该模式不同。了解MVC是什么以及它如何与您的项目相关才能知道是否从中受益。 - cbednarski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接