【问题标题】:How to return an included file in PHP without using a return如何在不使用返回的情况下在 PHP 中返回包含的文件
【发布时间】:2017-11-22 14:00:32
【问题描述】:

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

但它与 JSON 一起返回 HTML,当然还有 html = 1,因为 include 在成功时返回 1,如下所示:

<div>
    <br/>some data<br/>
</div>
{'html':1}

有没有办法让我在不使用模板内的 return 语句的情况下从包含的文件中获取内容?

【问题讨论】:

    标签: php html json templates


    【解决方案1】:

    您的问题是使用 include 本质上将您的 template.php 文件视为一个巨大的“回声”,因为在 template.php 中没有返回值

    可以更改 template.php 文件以返回 HTML 字符串,它会实现您想要的,但这是查看和管理的噩梦。

    return '<div>
    <br/>' . $data . '<br/>
    </div>';
    

    另一种方法是“捕获”包含文件的输出。它在您的 template.php 文件上要好得多,并且可以实现相同的目标。输出缓冲区函数本质上捕获“回显”的任何信息 - 您需要小心使用它以及 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 格式。

    【讨论】:

      【解决方案2】:

      你可以像这样使用ob_start

      ob_start();
      include 'path_to_your_file.php';
      $result= ob_get_contents();
      ob_end_clean();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-09
        • 1970-01-01
        • 2016-11-12
        • 1970-01-01
        相关资源
        最近更新 更多