PHP MVC,部分视图?

PHP MVC,部分视图?,php,model-view-controller,views,partial,Php,Model View Controller,Views,Partial,我正在构建一个小的PHP MVC,我用了一小部分代码。我想我需要“局部视图”,但我可能能够用现有代码实现一些东西 我的控制器目前采用最简单的形式: 实例化一个对象 检查是否设置了POST变量 根据需要显示视图1或视图2 当前视图: 显示HTML标记 使用并回显模型get函数,如getUserInfo() 一切都很好,但是现在代码在控制器和视图中都变得相当大,我已经达到了需要在主视图(1和2)中包含“模块”或子视图的情况 例如,如果加载了view2,则我需要显示(作为view2的一部分)另

我正在构建一个小的PHP MVC,我用了一小部分代码。我想我需要“局部视图”,但我可能能够用现有代码实现一些东西

我的控制器目前采用最简单的形式:

  • 实例化一个对象
  • 检查是否设置了POST变量
  • 根据需要显示视图1或视图2
当前视图:

  • 显示HTML标记
  • 使用并回显模型get函数,如getUserInfo()
一切都很好,但是现在代码在控制器和视图中都变得相当大,我已经达到了需要在主视图(1和2)中包含“模块”或子视图的情况

例如,如果加载了view2,则我需要显示(作为view2的一部分)另一个视图,例如一个由3部分组成的注册表单。这张登记表也有自己的控制器文件

我可以做一些类似的事情,这将起作用,并让您了解我正在尝试做什么,但我承认这打破了MVC设计模式

看法

一些内容
查看主页内容
然后将视图从控制器的正确位置拉入

如前所述,我认为我需要使用局部视图,但是我找到的大多数信息都是针对ASP的,我有点迷路了

我本以为这是一个相当常见的问题,所以我假设有一个明显的解决方案


谢谢

问题的根源在于您没有视图。你所谓的“视图”实际上是一个。这反过来会强制控制器中的表示逻辑

在适当的MVC视图中,包含所有表示逻辑的实例。它们从模型层获取信息,然后根据数据选择如何显示这些信息。每个视图操作多个模板


此外,您的控制器似乎承担了额外的责任。它应该改变模型层和当前视图的状态,而不是渲染模板。

不能说我同意tereško的观点。将表示逻辑放在一个单独的视图类中似乎更合适,但它确实增加了另一层复杂性。在许多情况下,这个附加层是不必要的-通常视图可以直接呈现您注入的任何模型或数据。因此,最终得到的是空视图类,它们只将模型从控制器传递到模板

我想说的是,保持简单,你可以用简单的MVC创建相当复杂(和可维护)的网站,而不需要引入模板的概念

要处理子视图,只需让主视图将数据注入子视图,这对控制器来说应该是透明的(控制器只提供主数据,而不关心如何呈现)。所以在实践中,你可以有这样的东西:

控制器:

public function someAction() {
    // ...
    $view = new View('name');
    $view->data = $someList;
}
<?php foreach ($someList as $item): ?>
    <?php echo (new View('subview', $item))->render();
<?php endforeach; ?>
查看:

public function someAction() {
    // ...
    $view = new View('name');
    $view->data = $someList;
}
<?php foreach ($someList as $item): ?>
    <?php echo (new View('subview', $item))->render();
<?php endforeach; ?>


我已经解决了这个问题,我认为如果我开发的框架有助于您查看的话,可以克服这个问题。它的功能还不完全,但是如果你看看core/library/renderer.php,部分视图的内容就在那里。我不认为有任何工作的例子还没有,我正在安装工作。谢谢你的答复。刚刚看了一下你的代码,看起来很不错!以最简单的形式,您有一个调用include()的方法?谢谢有两种方法,一种是include方法,它包含请求的文件,另一种是调用控制器do数据库逻辑等,然后包含在常规页面输出中。RenderPartial和Partial是两种方法。好的,谢谢,我不知道他们在做什么,所以我要玩一玩!刚刚找到这个-决定!谢谢分享。如果我能帮忙,请告诉我,我很乐意。谢谢你的回复。你可能是对的,因为我没有正确地理解观点你知道一个有用的和简单的参考,我可以看更多关于正确的“视图”设计的信息吗?是的,我的控制器当前正在选择要显示的“模板”,应该在哪里显示?谢谢值的赋值和模板的呈现应该在视图中进行。也许会有点帮助。这就是我自己开始研究MVC的地方。我刚刚读了这篇文章的这一页,这是我第一次开始研究“视图助手”的概念!看起来信息量很大,所以我稍后会有一个完整的阅读,注意你的通知,我相信会有一些!谢谢!你可能也会发现非常有用。非常感谢。我对视图、模板、助手等做了大量的阅读。但是,在我看来,我找不到正确视图的可靠示例,这应该包括整个页面的HTML标记,然后包含一些较小的模板文件来填充内容模块?我猜读到视图应该如何避开逻辑让我觉得我不能做像在全局视图文件中这样简单的事情?也许您可以将我链接到一个调用模板的“适当”视图文件?谢谢谢谢-你能举一个例子说明我的“观点”课上会讲些什么吗?目前,我没有一个类处理你看到的视图!谢谢问题是他已经介绍了模板的概念。OP只是将它们称为“视图”(这与您犯的错误相同)。