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不会给出错误)情况).
标签:output-buffering,templates,php 来源: https://codeday.me/bug/20191101/1987481.html