我正在尝试在API中转换现有网站,为了做到这一点,我需要在JSON中将一些内容作为HTML返回。我遇到的问题是我无法找到一种方法来进行模板工作。
我试图这样做
class TestController
{
public function get() {
$adapter = new Adapter();
$data = 'some data';
$html = include $_SERVER['DOCUMENT_ROOT'] . 'template.php';
$result = [
'html' => $html
];
return json_encode($result);
}
template.php:
<div>
<br/><?= $data ?><br/>
</div>
但它返回HTML和JSON,当然还有html = 1,因为include成功返回1,如下所示:
<div>
<br/>some data<br/>
</div>
{'html':1}
有没有办法让我从包含的文件中获取内容而不在模板中使用return语句?
答案 0 :(得分:2)
你的问题是使用include本质上将你的template.php文件视为一个巨人&#34; echo&#34;因为template.php
中没有返回任何值你可以更改template.php文件以返回HTML字符串,它可以达到你想要的效果,但这是一个看待和管理的噩梦。
return '<div>
<br/>' . $data . '<br/>
</div>';
另一种选择,就是&#34;捕捉&#34;包含文件的输出。它在你的template.php文件上更好,并实现了同样的功能。输出缓冲区功能基本上捕获任何信息&#34; echoed&#34; - 你需要小心使用它和session_start的位置,因为它可以让你措手不及,具体取决于你的应用程序的引导方式。
这是通过使用三个ob_函数来完成的,主要的一个是ob_get_contents,它将是下面示例中template.php的内容。 http://php.net/manual/en/function.ob-get-contents.php
ob_start();
include $_SERVER['DOCUMENT_ROOT'] . 'template.php';
$html = ob_get_contents();
ob_end_clean();
这是你的模板文件保持良好和干净,并且所有内容都被捕获以便以json格式返回。
答案 1 :(得分:0)
你可以像这样使用 ob_start
ob_start();
include 'path_to_your_file.php';
$result= ob_get_contents();
ob_end_clean();