PHP View,使用模板

好吧,我的问题很简单,但是很难接受该解决方案,但是无论如何..接下来,我有一个“微型框架”,可以编写单个方案,对我有很大帮助,可以加速但是,在某种程度上,问题仍然存在,在某种程度上,使用模板方案非常容易,也非常有趣,因为当您必须更改与可视化相关的任何内容时,模板只会更改,但是,及时渲染此模板,这是最好的方法?我目前正以这种方式工作:

<?php

          class View {

                 private $vars;

                 public function __get ( $var ) {
                        if ( isset( $this->vars [ $var ] ) ) {
                               return $this->vars[ $var ];
                        }
                 }

                 public function assign ( $var , $value ) {
                        $this->vars [ $var ] = $value;
                 }

                 public function show ( $template ) {
                        include_once sprintf ( "%s\Templates\%s" , __DIR__ , $template ) ;
                 }

          }

它不是完整的代码,我正在构建结构并正在审查该方案,因此我要执行以下操作..

<?php
          require_once 'MVC/Views/View.php';
          $View = new View ( ) ;

          $View->assign( 'title' , 'MVC, View Layer' ) ;
          $View->show ( 'test.phtml' );

和模板

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
       <head>
              <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
              <title><?php echo $this->title ?></title>
       </head>
       <body>

       </body>
</html>

输出是正确的,所有工作都按预期进行,但是我的问题是:这是最好的方法吗?包括文件并让剧本解释用.phtml编写的代码

解决方法:

在许多框架中,我都看到了这种说法:

public function show ( $template ) {
  ob_start();
  require sprintf ( "%s\Templates\%s" , __DIR__ , $template ) ;
  return ob_get_flush();
}

使用输出缓冲区,可以使模板评估为字符串,而不是直接在输出中发送模板.当您需要在评估模板后更改标题或进行后处理时,这可能会派上用场.

使用require代替include_once可以使您多次渲染同一模板(例如,如果您想要某种模板组合),并且在找不到模板文件时出错(include不会给出错误)情况).

上一篇:c-为什么std :: condition_variable没有按锁类型进行模板化?


下一篇:php-如何在Codeigniter中使用包含和基本模板?