BDu*_*elz 7 html php templates dry
我通过浏览和研究现有框架来了解MVC框架的工作原理.似乎我看到的每个框架都有一个布局,每个控制器中的每个方法都有自己的模板文件.所以会有一个登录模板,一个注销模板,一个寄存器,等等.
我的问题是,如何以及为什么要在一个文件中为整个页面创建模板.假设您想在多个页面上显示登录表单,是否需要为要在其上显示的每个模板创建登录表单?这不违反不重复自己的规则(DRY)吗?
到目前为止,我一直在做的事情是,我一直在创建liitle模板块,然后将它们组合起来创建每个页面.所以不要做这样的事情,
$title = 'Blah Blah Blah';
$user = 'Jon Miller';
include 'index.phtml';
<html>
<head>
<title><?php echo $title; ?></title>
</head>
<body>
<h3><?php echo $user; ?></h3>
<form>login form</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我一直这样做
$title = 'Blah Blah Blah';
include 'header.phtml';
$user = 'Jon Miller';
include 'user.phtml';
include 'login_form.phtml';
include 'footer.phtml';
header.phtml
<html>
<head>
<title><?php echo $title; ?></title>
</head>
<body>
user.phtml
<h3><?php echo $user; ?></h3>
login_form.phtml
<form>login form</form>
footer.phtml
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
总而言之,我只想知道正确的方法,以及如何以及为什么......这似乎违反了DRY规则.
谢谢
一个词:组织。分离页面的每个部分将允许单独查看/编辑每个部分。这个简单的概念非常有益。例如,团队中想要处理登录过程的任何人都可以轻松地发现他们必须进行编辑login_form.phtml,并且他们可以确保编辑login_form.phtml不太可能无意中干扰其他功能。
作为最佳实践,我是这样做的(不完全相同,但相似)。
$Title = 'Blah Blah Blah';
$User = 'Jon Miller';
$ThemeName = "MyGreenPage";
$Contents = array("User", "Login_Form");
function Include($FileName) {
if (file_exists($FileName))
include $FileName;
}
Run Code Online (Sandbox Code Playgroud)
MyGreenPage.phtml:
<html>
<head>
<title><?php echo $title; ?></title>
<?php
foreach($Contents as $Content)
Include("$Content.pcss");
?>
<?php
foreach($Contents as $Content)
Include("$Content.pjs");
?>
</head>
<body>
<?php
foreach($Contents as $Content)
Include("$Content.phtml");
?>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
User.pcss:
/* Some styles needed by User */
Run Code Online (Sandbox Code Playgroud)
User.pjs:
/* Some script needed by User */
Run Code Online (Sandbox Code Playgroud)
User.phtml:
<h3><?php echo $user; ?></h3>
Run Code Online (Sandbox Code Playgroud)
Login_Form.pcss:
/* Some styles needed by Login_Form */
Run Code Online (Sandbox Code Playgroud)
Login_Form.pjs:
/* Some script needed by Login_Form */
Run Code Online (Sandbox Code Playgroud)
Login_Form.phtml:
<form>login form</form>
Run Code Online (Sandbox Code Playgroud)
让我再次提醒您,这并不完全是我所做的(我使用 OOP 所做的),因此这可能不会完全按原样运行,您可能需要编辑它。