如何在不使用返回

时间:2017-11-22 14:00:32

标签: php html json templates

我正在尝试在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语句?

2 个答案:

答案 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();