Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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_Templates - Fatal编程技术网

Php 对于网页组件,您将在MVC中执行什么操作?

Php 对于网页组件,您将在MVC中执行什么操作?,php,templates,Php,Templates,我曾经把我的网页的逻辑和标记放在一个php文件中 然而,我了解了MVC。我读了一篇关于这个概念的文章,但我对这个主题仍然有点困惑: 控制器应仅处理逻辑 视图处理布局、显示和HTML 视图中不应有逻辑代码 我的问题: 有人能给我举个例子说明如何实现视图网页组件(如页眉、页脚、菜单、子菜单)? 在模板中,为了最小化逻辑,可以: <html> <body> <div><?=$html_of_header ?></div> <div>

我曾经把我的网页的逻辑和标记放在一个php文件中

然而,我了解了MVC。我读了一篇关于这个概念的文章,但我对这个主题仍然有点困惑:

控制器应仅处理逻辑

视图处理布局、显示和HTML

视图中不应有逻辑代码

我的问题: 有人能给我举个例子说明如何实现视图网页组件(如页眉、页脚、菜单、子菜单)?

在模板中,为了最小化逻辑,可以:

<html>
<body>
<div><?=$html_of_header ?></div>
<div><?=$html_of_submenu ?></div>
<div><?=$html_of_mainContent ?></div>
</body>
</html>

但是,如果我使用一个变量来保存eg头的所有代码,这对我来说是没有意义的,因为我想我需要很多字符串concat,而我只是在没有MCV的情况下回显它

或者像这样:

<html>
<body>
<div><? include('header.php') ?></div>
<div><? include('submenu.php') ?></div>
<div><? include('content.php') ?></div>
</body>
</html>

我不知道如何传递数据来告诉submenu.php&content.php我在哪个目录中。我在会议上通过了吗?看起来不太好。此外,它不利于错误处理

另一种选择:

<? 
$header = new Header();
$submenu = new Submenu($cataId);
$content = new Content($pageId);
?>
<html>
<body>
<div><? $header -> render(); ?></div>
<div><? $submenu -> render(); ?></div>
<div><? $content -> render(); ?></div>
</body>
</html>


这样行吗?这是否意味着将逻辑放在我的视图中?

该视图不包含业务逻辑。视图中的“无代码”或“无逻辑”与视图中的无业务逻辑之间存在差异

什么是业务逻辑?这是你的应用程序“能做的一切”。您的应用程序具有的任何功能。您的应用程序可以执行的任何“操作”。例如,这是:

  • 从数据库检索数据
  • 具体操作,如“注册用户”、“发送通知电子邮件”或“检索X月份的业务报告”
  • 任何其他这样的核心逻辑
所有这些东西都放在模型里了。请注意,模型不是一个特定的类或一组类,模型是使应用程序工作所必需的任何东西。它可以根据需要大而复杂

该视图仅包含表示所需的代码。这也可能是大量的代码。视图不必是哑模板。视图可以执行显示内容所需的任何操作。如有必要,视图可以是大型和复杂的。但它们不能包含属于模型的任何代码或逻辑

控制器填补了模型、视图和世界其他部分之间的必要粘合剂的微小剩余部分

对于这些组件的具体外观,没有教条式的答案。MVC方法只是区分三种逻辑上不同的代码以及它们应该如何分组,仅此而已。如果你总是记住这一点,那么这种分离应该是不言自明的:

  • 该模型是“你的应用程序”,它包含了每一个核心功能和职责。如果打开交互式命令行并仅加载模型,则只需调用正确的模型函数,就可以在应用程序中执行任何操作
  • 可以根据需要交换意见,您可能希望以不同的方式呈现相同的内容。只放入与特定表示相关且完全可交换到视图中的代码
  • web应用程序中的控制器大多充当HTTP请求的“适配器”,它们唯一的任务是处理请求,调用必要的模型操作,并在响应中调用正确的视图。控制器也可以交换以适应不同的“输入”场景;想象一下,在web上,作为REST API,在命令行上作为管理界面,使用不同的控制器来使用您的应用程序。除了在控制器中输入所需的代码外,不要将任何其他内容放入控制器中

  • 控制器不包含逻辑。视图不包含逻辑(仅包含表示逻辑)。模型是一个层。是的,我知道如何把东西放在模型中,并把所有的演示放在视图中。但我不知道如何实现“胶水”。例如,我有一个mainMenu的模型,它查询数据库以获得menuItem的id和标题。我有一个视图,它包含页面布局和主菜单区域。那么,您如何使它成为一个良好的实践呢?再说一次:视图可以像它需要的那样复杂。做任何你需要做的事情,只要没有问题,或者如果你把你的视图换成另一个视图,也不会有大量的代码重复。如果需要从数据库中获取视图的某些项,则视图应该可以访问相应的模型函数以获取所需的数据。不过,您不应该将其放入HTML模板中,而应该使用另一个函数/类来管理数据检索,并让HTML模板仅输出该数据。“可以按照需要的那样复杂”菜单视图可以是一组PHP文件,而不仅仅是一个用于查看的PHP和一个用于模板的PHP吗?我可能会想到一个php来处理布局,一些php处理web组件,但没有想到如何将它们粘合在一起……绝对没有。视图可以是所需的任意多个文件。通常在OOP中,视图是一个类(或一组类),它执行任何需要的操作来获取所需的数据,然后呈现一个单独的HTML模板文件。