【问题标题】:PHP MVC load multiple controllers models and views in same pagePHP MVC 在同一页面中加载多个控制器模型和视图
【发布时间】:2023-03-09 06:17:01
【问题描述】:

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

该结构的工作方式如下:引导类根据 URL 加载适当的控制器、方法和变量。它还启动了一个主控制器、主模型和主视图,它们具有一些通用的功能。控制器启动他们的模型并最终渲染他们的模板。

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

url 类似于:localhost/MyApp/grid。

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

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

每个模板都包含代码:

echo $this->data

【问题讨论】:

    标签: php model-view-controller


    【解决方案1】:

    有一些不同的概念来处理这个问题。

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

    例如:

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

    在每个页面上,内容模型都会发生变化,而其他页面保持不变。

    【讨论】:

    【解决方案2】:

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

    那里有大错误,相信我 - 我试过了。结局不好。

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

    更大的错误。框架不实现 MVC。因此,无论您阅读什么,都只是有人试图将他们抛光的粪便当作黄金出售。

    (..) 并在控制器处理模型和呈现视图的地方创建了一个 (..)

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

    </rant>

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

    【讨论】:

    • 所以你的意思是,切换到像 Symfony 或 Laravel 这样的东西?我去看看树枝,谢谢。
    • @IceEcold 我什么时候说过像 “切换到 Symfony 或 Laravel 之类的东西”这样愚蠢的话。我告诉过你尝试使用 Twig,它是一个独立的作曲家包。
    猜你喜欢
    • 2013-02-11
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 2016-10-30
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多