Cakephp' s $ this-> autorender = false并没有按预期显示整个字符串

时间:2016-07-12 10:31:28

标签: php view controller cakephp-2.0 ovh

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

我将网站上传到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,并不感觉它是&#39;应该怎么做。

此代码在我的计算机上脱机工作(Windows / uWamp),我无法理解错误。我怀疑来自OVH的东西,但不能确定并且不知道在哪里看。以下是此主机的phpinfo:http://darxnake.fr/nadau3/pages/info/

你能帮我看看发生了什么吗?谢谢。

修改:

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

在我的本地电脑上,这个标题不会发送(不知道为什么),在OVH上使用相同的测试,但使用CakePhp 3时,也不会发送此标题。

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

1 个答案:

答案 0 :(得分:0)

我确切地知道为什么但是在使用之后;

$this->autoRender = false;

你无法准确得到实际结果。我也面临过这种情况。 在我的情况下,我删除了autoRender并且工作正常。 如果不是强制性的,请尝试删除该行。