最简单/最快捷的';渲染';在PHP中查看文件
假设我有一个名为MyView.php的简单视图文件:最简单/最快捷的';渲染';在PHP中查看文件,php,templates,Php,Templates,假设我有一个名为MyView.php的简单视图文件: <!DOCTYPE html> <html> <head> <title><?=$title?></title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body>
<!DOCTYPE html>
<html>
<head>
<title><?=$title?></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<?=$cotent?>
</body>
</html>
我需要从那里调用MyView.php
,并将$title
和$coent
变量传递给它
我知道有一种方法可以做到这一点,就是将
替换为,比如说,{TITLE}
,然后在渲染($data)
中只需将MyView.php
加载到变量中,并使用preg_replace()
将所有{BLAH}
替换为$BLAH
还有其他简单的方法吗
不得使用框架。一切从头开始。是的。从我的个人图书馆:
function renderTemplate($tmpl, $__vars=array()) {
extract($__vars, EXTR_SKIP);
include($tmpl);
}
renderTemplate("MyView.php", array( "title" => "My Title", "content" => "My Content" ));
如果要渲染为字符串,可以稍微修改它:
function renderTemplateToString($tmpl, $__vars=array()) {
ob_start();
extract($__vars, EXTR_SKIP);
include($tmpl);
return ob_get_clean();
}
请注意,
renderTemplate()
需要保存在它自己的函数中,即使只调用一次:它使用函数的变量范围将模板变量与其他变量分开。是。从我的个人图书馆:
function renderTemplate($tmpl, $__vars=array()) {
extract($__vars, EXTR_SKIP);
include($tmpl);
}
renderTemplate("MyView.php", array( "title" => "My Title", "content" => "My Content" ));
如果要渲染为字符串,可以稍微修改它:
function renderTemplateToString($tmpl, $__vars=array()) {
ob_start();
extract($__vars, EXTR_SKIP);
include($tmpl);
return ob_get_clean();
}
请注意,
renderTemplate()
需要保存在它自己的函数中,即使只调用一次:它使用函数的变量作用域将模板变量与其他变量分开。为什么不将该文件包括进去呢?PHP本质上已经是一种模板语言。如果你坚持使用自定义标记(而不是像@Rick提到的那样包括在内),构建替换数组并使用str\u replace
而不是preg\u replace
。性能可能会更好。@RichBradshaw我只能包含PHP类。不是观点。否则会一团糟。@rinchik我看不出包含file.php
比文件获取内容('file.php)
和一堆str\u replace()
@MathieuImbert不是str\u replace
而是preg\u replace()
。而不是一堆:`$patterns=array();$replacements=array();如果(is_数组($vars)){foreach($vars as$key=>$val){$key=strtoupper($key);$patterns[]=“/{”$key.}/“;$replacements[]=stru replace('$,'\$,$val);}$result=@preg_replace($patterns,$replacements,$data)`你为什么不干脆包含
这个文件呢?PHP本质上已经是一种模板语言。如果你坚持使用自定义标记(而不是像@Rick提到的那样包含),那么就构建替换数组,并使用str\u replace
而不是preg\u replace
。性能可能会更好。@RichBradshaw我只能包含PHP类。不是观点。否则会一团糟。@rinchik我看不出包含file.php
比文件获取内容('file.php)
和一堆str\u replace()
@MathieuImbert不是str\u replace
而是preg\u replace()
。而不是一堆:`$patterns=array();$replacements=array();如果(is_数组($vars)){foreach($vars as$key=>$val){$key=strtoupper($key);$patterns[]=“/{”$key.}/“;$replacements[]=stru replace('$,'\$,$val);}$result=@preg_replace($patterns,$replacements,$data)`也可以很容易地将其与ob_uu
函数结合起来,以返回内容而不是输出内容。@rinchik您花时间对自己的问题进行了评论,并说“只能包含PHP类,不能包含视图”,然后您+1一个包含视图的答案?@colinmoreli yep。你说得对:)这里include($tmpl)
不同于include('MyView.php')代码>@Ben你能提供更多关于ob_uu函数的详细信息吗?这些是启动/冲洗的吗?还是不同的?@rinchik:添加了一个示例,说明如何使用输出缓冲来呈现字符串。还可以轻松地将其与ob\uu
函数结合起来,返回内容,而不是输出内容。@rinchik您花时间对自己的问题进行了评论,并说“只能包含PHP类,不能包含视图”然后你+1一个包含视图的答案?@colinmoreli是的。你说得对:)这里include($tmpl)
不同于include('MyView.php')代码>@Ben你能提供更多关于ob_uu函数的详细信息吗?这些是启动/冲洗的吗?还是不同的?@rinchik:添加了一个如何使用输出缓冲渲染字符串的示例。