Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中创建视图-最佳实践_Php_Templates_Xhtml_Separation Of Concerns - Fatal编程技术网

在PHP中创建视图-最佳实践

在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

我正在与其他两名开发人员一起开发一个网站。我只负责创建视图

数据在对象中可用,我有getter读取数据,然后创建XHTML页面

在不使用任何模板引擎的情况下,执行此操作的最佳实践是什么


非常感谢。

如果您不想使用模板引擎,可以使用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的短标记冲突。如果你知道自己在做什么,就不会有问题,但你应该小心。