Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MVC-通用功能的场所?_Php_Model View Controller - Fatal编程技术网

Php MVC-通用功能的场所?

Php MVC-通用功能的场所?,php,model-view-controller,Php,Model View Controller,我刚刚开始研究MVC,我是个新手。我想把程序代码移植到它上面,但我很挣扎(请不要建议使用框架) 我能理解它是如何工作的,但理解和做是不同的。在我的过程代码中,我有几个函数,比如message()。例如,如果用户没有查看当前页面的权限,则会调用这些命令 我的问题是将其添加到MVC中。到目前为止,我已经添加了细枝,并且我已经成功地在索引页上呈现了一些细枝,但是使用诸如message之类的函数非常简单: message('Message Text'); 将它添加到控制器目录将允许它作为网页进行访问,

我刚刚开始研究MVC,我是个新手。我想把程序代码移植到它上面,但我很挣扎(请不要建议使用框架)

我能理解它是如何工作的,但理解和做是不同的。在我的过程代码中,我有几个函数,比如message()。例如,如果用户没有查看当前页面的权限,则会调用这些命令

我的问题是将其添加到MVC中。到目前为止,我已经添加了细枝,并且我已经成功地在索引页上呈现了一些细枝,但是使用诸如message之类的函数非常简单:

message('Message Text');
将它添加到控制器目录将允许它作为网页进行访问,这是我不希望看到的。通过这个模型,我不知道如何在不首先需要文件的情况下做到这一点。我可以使用一个函数,但我不想要全局变量,这也是我改变的部分原因

如何正确放置常用函数

编辑


我使用的是这个的一个修改版本:

我倾向于认为传统的
MVC
是这样的:

控制器是我实现产品的业务逻辑。
模型是表示数据的代码。
视图是代表我的产品的东西

在这种模式下,
代表我的产品的东西就是最终用户看到的东西。
因此,如果它是一个用户体验组件,那么它就是视图的一部分

这样,就很容易找到如何使用它的方法:

  • 您可以
    使用path/to/notifications.php
    ,然后
    $notifications=newnotifications()
    where
    notifications.php
    是一个类,用于方便您引用的消息
  • 您可以
    在视图(甚至是基本视图!)上扩展通知
    ,以便您实例化的任何视图都可以立即访问您的通知类
  • 您可以(尽管可能不应该)
    require_一次('path/to/notifications.php')
    底线是:

    • 将旧的过程代码放在组织良好的类中。如果代码是这样做的,它可能会被命名为类似于
      通知
      。重要的是要组织得好,命名得好,不要试图在一件事情上强加太多的代码
    • 在代码中使用该类。您可以显式地使用它的名称空间和
      new
      它的一个实例,也可以扩展它,将其作为视图的父类

    您可以使用层继承来执行此任务。您也可以在任何MVC实现中使用帮助器(web上充满了这方面的参考),您可能会遇到他的问题:我们如何处理常量、常用函数/方法和其他东西?一种常见的方法是使用提供此类功能的“助手”类(或模块、文件等)。另一个是提供一个配置文件。另一个是配置单例,等等。在任何时候,您都将不再需要模型之外的文件,这很好。正如您所说,MVC的“最好”之处之一是它面向模块化,并从业务逻辑中分离视图。它是面向功能的,而不是面向“文件”的。换句话说:
    require()
    s很好,只要您使用它们以“MVC方式”继续编程(我的意思是:对象、它们之间的消息传递、它们特性的封装等)。也许看看CodeIgniter的MVC helpers实现()会有一些想法。它基本上是一个框架中类和过程函数的混合体。不过,它并没有“破坏”应用程序的MVC。@rockerest我已经按照您的建议尝试了类选项,并且在加载路由器时通过index.php页面上的functions类传递了注册表。等等。我对它的加载并不完全满意,但一旦加载后,处理方面给我留下了深刻的印象。@Chris98-这是我很久以前写的一篇文章。这样的代码一旦运行,只要您始终组织类,就不需要再次显式注册它们。在这种情况下,只要我试图自动加载的文件在我的
    应用程序中_INCLUDE_PATH
    自动加载函数就会找到并需要它。这个特定的实现是初步的和幼稚的,但是了解PHP自动加载并了解大牌是如何实现的可能会有所帮助。谢谢-现在还有一个问题(如果这些看起来很基本的话,很抱歉),我如何包含一个通用的页眉/页脚?目前,我需要header/footer.php和发送页眉的文件。但是,如何以MVC的方式实现这一点呢?