【问题标题】:Cakephp's $this->autorender=false doesn't show entire string as expectedCakephp 的 $this->autorender=false 没有按预期显示整个字符串
【发布时间】:2016-11-14 13:04:15
【问题描述】:

出于 ajax 的目的,我试图在没有任何视图的情况下从 Cakephp (2.8.5) 控制器呈现字符串。为此,我通常会编写代码,然后在return 之前使用$this->render = false,它可以正常工作。

我在 OVH(一家法国互联网服务提供商)上上传了网站,但出了点问题,呈现的字符串没有按应有的方式运行。在达到一定大小之前,它不会按预期显示。

为了演示这个问题,我在线准备了一个动态页面(您可以将 15 更改为任意数字,低于 15 会生成问题): http://darxnake.fr/nadau3/pages/test/15

代码很简单:

PagesController.php:

class PagesController extends AppController {
    public function test($nb=1) {

        $str = "";
        $char = "o";
        $upper = true;

        for ($i=0; $i < $nb; $i++) {
            $str .= $upper ? strtoupper($char) : strtolower($char);
            $upper = $upper ? false : true;
        }

        $this->autoRender = false;

        return $str;
    }
}

将最后一个return 更改为die 会显示完整的字符串,但我不喜欢控制器中的die,感觉不应该这样做。

此代码在我的计算机 (Windows / uWamp) 上脱机工作,我不明白出了什么问题。我怀疑来自 OVH 的一些东西,但不能确定也不知道去哪里找。这是此主机的 phpinfo:http://darxnake.fr/nadau3/pages/info/

你能帮我看看是怎么回事吗?谢谢。

编辑:

终于找到了导致问题的原因。 Cakephp2 在每次响应时都会发送一个名为 Content-Length 的 HTTP 标头。虽然传递的大小是准确的(在代码中询问 14 个字符的 14 个传递到标题),但呈现的字符串被剥离。如果我在 CakePhp 库 (/lib/Cake/Network/CakeResponse.php) 中禁用此标头,则渲染字符串是固定的。

在我的本地电脑上,这个标头没有发送(不知道为什么),而在 OVH 上进行了相同的测试,但使用 CakePhp 3,这个标头也没有发送。

所以我禁用了它,lib 代码和问题消失了,但如果有人能解释会发生什么,如果我做错了什么禁用它。我对 HTTP 标头不是很熟悉...

【问题讨论】:

    标签: php view controller cakephp-2.0 ovh


    【解决方案1】:

    不知道为什么,但是用了之后;

    $this->autoRender = false;
    

    您无法准确获得实际结果..我也遇到过这种情况。 就我而言,我删除了 autoRender 并且工作正常。 如果不是强制性的,请尝试删除该行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-12
      • 2019-08-01
      • 2017-04-04
      • 2019-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-14
      相关资源
      最近更新 更多