PHP MVC在同一页面中加载多个控制器模型和视图

时间:2018-05-04 15:06:15

标签: php model-view-controller

我目前正在用PHP设计自己的MVC框架。我已经阅读了很多关于MVC框架的内容,并且在控制器处理模型和渲染视图时做了一个,尽管不建议这样做。

结构的工作原理如下:bootstrap类根据URL加载适当的控制器,方法和变量。它还启动了一个maincontroller,mainmodel和mainview,它们具有一些通用功能。控制器启动他们的模型,最后渲染他们的模板。

问题是我有3个MVC对象。顶级菜单,搜索栏和表格。我希望这些在同一页面上呈现。但是,由于我让控制器进行渲染,我无法在同一网页中渲染三个不同的部分。我是否需要某种辅助类,如果需要,我该如何以正确的方式实现它?

网址如下:localhost / MyApp / grid。

每个控制器都包含以下代码:

$this->view->render(filepath/file.php)

每个模板都包含代码:

echo $this->data

2 个答案:

答案 0 :(得分:2)

  

我目前正在用PHP设计自己的MVC框架。

那里有大错,相信我 - 我试过了。它并没有很好地结束。

  

我已经阅读了很多关于MVC框架(..)

的内容

更大的错误。框架不实现MVC。因此,无论你读到什么,只是有人试图将他们的抛光狗屎卖为黄金。

  

(..)并且在控制器处理模型并呈现视图(..)

之前

Controller不负责渲染模板(因为我不相信你实际上有视图)并且没有多个“模型”。

</rant>

你需要的是一个合适的模板引擎。试试twig。让模板引擎处理共享部分。

答案 1 :(得分:1)

有一些不同的概念可以解决这个问题。

在我的一个项目中,我将模板中的html拆分,视图根据需要加载每个区域。

例如:

$this->renderTemplate('page.header', $pageHeaderModel);
$this->renderTemplate('page.content.'.$viewKey, $pageContentModel);
$this->renderTemplate('page.footer', $pageFooterModel);

在每个页面上,内容模型都会更改,而另一个页面保持不变。