在PHP中创建视图-最佳实践
我正在与其他两名开发人员一起开发一个网站。我只负责创建视图 数据在对象中可用,我有getter读取数据,然后创建XHTML页面 在不使用任何模板引擎的情况下,执行此操作的最佳实践是什么在PHP中创建视图-最佳实践,php,templates,xhtml,separation-of-concerns,Php,Templates,Xhtml,Separation Of Concerns,我正在与其他两名开发人员一起开发一个网站。我只负责创建视图 数据在对象中可用,我有getter读取数据,然后创建XHTML页面 在不使用任何模板引擎的情况下,执行此操作的最佳实践是什么 非常感谢。如果您不想使用模板引擎,可以使用PHP的基本模板功能 实际上,您应该只编写HTML,并且在需要输出变量值时,使用打开PHP部件。对于示例,我将假定$data是您的数据对象 例如: <div id="fos"><?php echo $data->getWhatever(); ?&g
非常感谢。如果您不想使用模板引擎,可以使用PHP的基本模板功能 实际上,您应该只编写HTML,并且在需要输出变量值时,使用
打开PHP部件。对于示例,我将假定$data
是您的数据对象
例如:
<div id="fos"><?php echo $data->getWhatever(); ?></div>
<div id="fos2">
<?php if ($data->getAnother() > 0) : ?>
<span>X</span>
<?php else : ?>
<span>Y</span>
<?php endif; ?>
</div>
如果您知道短标记的使用将在服务器上启用,为了简单起见,您也可以使用它们(在XML和XHTML中不建议这样做)。使用短标记,您只需使用
打开PHP部件即可。另外,
是呼应某物的缩写
第一个带有短标记的示例:
<div id="fos"><?=$data->getWhatever()?></div>
不过,您应该知道在何处使用换行符和空格。浏览器将接收与您编写的文本相同的文本(PHP部分除外)。我的意思是: 编写此代码:
<?php
echo '<img src="x.jpg" alt="" />';
echo '<img src="y.jpg" alt="" />';
?>
不等同于此:
<img src="x.jpg" alt="" />
<img src="y.jpg" alt="" />
因为在第二个元素中,在
img
元素之间有一个实际的\n
,浏览器将其转换为空格字符,如果图像是内联的,则显示为图像之间的实际空格。使用单独的文件读取数据:
<?php
if ($foo == False)
{
$bar = 1;
}
else
{
$bar = 0;
}
?>
然后在HTML文件中引用结果状态:
require 'logic.php';
<html>
<!--...-->
<input type="text" value="<?php echo $bar; ?>" > //Logic is separated from markup
<!--...-->
</html>
需要'logic.php';
我不知道,我真的知道你的问题。因此,如果我的答案不准确,我想删除
此类将创建简单视图
class View
{
public function render($filename, $render_without_header_and_footer = false)
{
// page without header and footer, for whatever reason
if ($render_without_header_and_footer == true) {
require VIEWS_PATH . $filename . '.php';
} else {
require VIEWS_PATH . '_templates/header.php';
require VIEWS_PATH . $filename . '.php';
require VIEWS_PATH . '_templates/footer.php';
}
}
private function checkForActiveController($filename, $navigation_controller)
{
$split_filename = explode("/", $filename);
$active_controller = $split_filename[0];
if ($active_controller == $navigation_controller) {
return true;
}
// default return
return false;
}
private function checkForActiveAction($filename, $navigation_action)
{
$split_filename = explode("/", $filename);
$active_action = $split_filename[1];
if ($active_action == $navigation_action) {
return true;
}
// default return of not true
return false;
}
private function checkForActiveControllerAndAction($filename, $navigation_controller_and_action)
{
$split_filename = explode("/", $filename);
$active_controller = $split_filename[0];
$active_action = $split_filename[1];
$split_filename = explode("/", $navigation_controller_and_action);
$navigation_controller = $split_filename[0];
$navigation_action = $split_filename[1];
if ($active_controller == $navigation_controller AND $active_action == $navigation_action) {
return true;
}
// default return of not true
return false;
}
}
所以现在你可以创建你的模板,并可以从任何地方调用它,就像
$this->view->my_data = "data";
$this->view->render('index/index');
//
在index/index.php上,您可以调用数据$this->my_data 为什么您不想使用任何模板语言?PHP本身可以用作模板语言,因此您可能需要打开短标记(不一定,但这样写起来就少了)。@baz:当然。你也可以用汇编语言编写很棒的网站。你使用的是框架还是自制的?@nikic我一直认为PHP的短标记(以及所有控制结构的可选语法)可以提供模板使用。在我看来,这是应该采用的方法。事实上,老实说,模板系统的使用已经过时了。模板系统的失败在于,是的,你编写了它,你知道如何使用它,但是当你雇用一个新的开发人员时会发生什么呢?他现在必须阅读你的代码并学习你的模板系统。@Dalton有很多像Smarty这样的模板系统。为什么在XHTML中不建议使用短标记?@binaryLV XHTML基本上是一个XML文档。指定XML头(
)将与PHP的短标记冲突。如果你知道自己在做什么,就不会有问题,但你应该小心。