gpt4 book ai didi

php - HMVC 和 HTML 组件化

转载 作者:可可西里 更新时间:2023-10-31 23:47:39 28 4
gpt4 key购买 nike

我读过几篇关于 HMVC 的文章,用 PHP 和其他语言,在所有这些文章中,这种模式的实现都是关于有一个“主 Controller ”请求一个的响应主体或更多内部或外部资源,使用 cURL 或 Stream Contexts,以便直接通过 Response 对象或通过自定义 View 引擎构建自己的资源,并使用获得的 HTML 分配模板变量。

然而,所有这些文章都太过拘泥于技术概念,以至于大多数时候它们并没有提到所有相关的要点。所以我得出的结论是,HMVC 的基本概念是,一般来说,MVC 中的 MVC,无论是分层还是孤立地无缝工作,总是以相同的方式。

但是,如果为了让每个子系统以相同的方式工作无论如何它需要最终的脚本、样式表甚至额外的标记?

举个例子更容易理解:

考虑使用由 N 个组件组成的 Bootstrap 3 开发的应用程序,所有这些组件也是使用相同的框架开发的(因此它们独立工作的方式与主应用程序的一部分完全相同),其中使用以下伪代码形象地创建的 HMVC:

// Make the Requests

$projects = new Request( 'management/projects', 'GET' );
$clients = new Request( 'management/clients', 'GET' );

// Creates the Template Variables with Response Bodies HTML

$this -> view -> assign(

array(

'projects' => $projects -> send(),
'clients' => $clients -> send()
)
);

As a matter of clarification in this fragment Request::send() would return the HTML

会导致类似于:

<html lang="en">

<head>

<meta charset="utf-8">

<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">

</head>

<body>

<div class="container-fluid">

<!-- Sidebar -->

<div class="row">

<div class="col-sm-3 col-md-2 sidebar" id="sidebar" role="navigation">

<ul>
<li>Sidebar Item</li>
<li>Sidebar Item</li>
<li>Sidebar Item</li>
</ul>

</div>

</div>

<!-- Main Content -->

<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">

<html lang="en">

<head>

<meta charset="utf-8">

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">

</head>

<body>

<div class="container-fluid">Component HTML</div>

</body>

</html>

</div>

</div>

</body>

</html>

在这个例子中,这“恰好”是错误的,毕竟,在一个真正的应用程序中,我们可能会遇到脚本冲突或 CSS 规则弄乱在为组件设计的部分(如页脚或其他后续组件)之后出现的任何 HTML等等……

也就是说,HTML 组件化应该如何在 HMVC 中进行?

我遇到的最小的想法是这个“主 Controller ”来解析每个组件接收到的 HTML 并只从中获取它真正需要的东西,比如 <body></body> 中特定包装 DIV 中的所有内容。 .

但在我搜索过的任何内容中,我都没有看到任何与此相近的内容。

最佳答案

HMVC 背后的思想是它提供了一种在 JAVA 中使用 MVC 创建小部件的解决方案。这是通过将多个 MVC 小部件彼此叠加(使用层次结构)来完成的。然而,与所有设计模式一样,您应该只使用它们来解决问题或创建急需的结构。您问题的主要要点暗示您想要使用该模式,只是为了使用该模式。您应该问自己“我为什么要使用这种模式,它能为我解决什么问题?”如果答案是“我没有问题,只是想使用它,因为它看起来很棒”,那么您就在做。

HMVC 与 PHP 的实用性是有限的。您仍然可以将它用于原始想法的某种扩展。请记住,PHP/Web 是无状态环境,而 Java 则不是。

主 Controller (MVC 层 0)- 子 Controller (MVC 层 1)- 子 Controller (MVC 层 N)

View 由 Controller 控制,模型也是如此。因此,在每个 Controller 中,您需要创建一种方法来处理传入的请求,如果需要,将其传递到另一个 MVC 层,并加载正确的模型/ View 。您对可能发生的 CSS/Script 错误的担忧。此模式基于层次结构,因此作为编码人员,您需要意识到这一点,并确保层次结构中每个较低的 MVC 层都可以与上面的层一起工作。

关于php - HMVC 和 HTML 组件化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27656783/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com