Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.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 - Fatal编程技术网

最简单/最快捷的';渲染';在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>

假设我有一个名为MyView.php的简单视图文件:

<!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:添加了一个如何使用输出缓冲渲染字符串的示例。