3

我不太明白 renderpartial 方法中的第三个和第四个参数(return 和 processOutput)是做什么的。这是我在 Yii 的文档中找到的:

public string renderPartial(string $view, array $data=NULL, boolean $return=false, boolean $processOutput=false)
 - $view    (string)    name of the view to be rendered. See getViewFile for details about how the view script is resolved.
 - $data    (array)     data to be extracted into PHP variables and made available to the view script
 - $return  (boolean)   whether the rendering result should be returned instead of being displayed to end users
 - $processOutput   (boolean)   whether the rendering result should be postprocessed using processOutput.

我环顾四周,但似乎无法理解该文档到底想说什么。

  1. 对于“return”参数,它表示它控制是否将结果返回或显示给最终用户。这两件事(返回给用户和显示给用户)不是完全一样的吗?

-例如,我正在尝试通过 ajax 向页面添加内容。服务器回显一个 json 编码的 renderpartial 语句,客户端的 javascript 使用 jquery 方法插入它。当我将“return”参数设置为 false 时,整个 ajax 操作都会正常工作,并且这些东西会成功插入到我指定的位置。但是,当我将“return”参数设置为 true 时,服务器会将代码仅作为文本而不是 html 回显。然后客户端的javascript抱怨几个错误......这对我来说根本没有任何意义。

  1. 什么是后处理,在哪里指定?我知道我没有编写任何“后处理”代码,那么这是从哪里来的?

任何帮助将非常感激。

4

2 回答 2

4

返回选项选择代码回显是否输出。如果$return = true;这意味着您必须自己获取字符串并回显它。基本上这是必须写之间的区别

<?php $this->renderPartial($view, $data, false); ?>

<?php echo $this->renderPartial($view, $data, true); ?>

至于 $processOutput 变量,它用于在返回之前在 html 上调用 $this->processOutput。例如,这可用于在 ajax 请求上生成 hacky 解决方案,请看这里:http ://www.yiiframework.com/forum/index.php/topic/24927-yii-processoutput-only-for-certain-action /这里Yii renderpartial (proccessoutput = true) 避免重复的 js 请求大多数情况下,你不会使用这个特性,你不应该担心它:)

如果它使任何事情更清楚,这里是相关的源代码:

if($processOutput)
    $output=$this->processOutput($output);

if($return)
    return $output;
else
    echo $output;

(在这里找到:http ://www.yiiframework.com/doc/api/1.1/CController#renderPartial-detail )

于 2013-11-11T21:27:08.087 回答
3

让我们一一解答。

  1. $return paremeter:它定义了您是否要将渲染页面的输出发送给客户端(请求页面的人)。这是它的工作原理:

    <?php
    ob_start();
    ?>
    <html>
    <body>
    <p>It's like comparing apples to oranges.</p>
    </body>
    </html>
    <?php
    $output=ob_get_contents ();
    echo "This is will outputted before";
    echo $output;
    ?>
    

    这将This is will outputted before在页面中的所有 HTML 之前输出,正如我们所说的使用输出ob_start()而不是将其发送到浏览器(客户端)并使用检索它ob_get_contents ()并将输出存储在$output. 我们可以使用代码的最后两行来演示这个东西。

    如果您传递第三个参数true,它将执行类似的操作。它将消耗输出并将其作为字符串返回。因此,您可以在字符串中捕获输出。

      $output=$this->renderPartial('a_view.php',$data,true);
      //this line will generate the output
      echo $output;
    

    您可以在此处了解有关 php 中的输出控制的更多信息: Output Buffering Controll

  2. $processOutput 参数:如果你传递参数 true 它将调用的processOutput($output)函数CController,这里$output是从你设置的 php 页面呈现的内容。默认情况下,它不会被调用renderPartial。它被调用render()并从文档中引用的renderText()方法:CController.

    对 render() 生成的输出进行后处理。这个方法在 render() 和 renderText() 结束时被调用。如果有注册的客户端脚本,此方法会将它们插入到适当位置的输出中。如果有动态内容,它们也会被插入。该方法还可以将持久的页面状态保存在页面中的有状态表单的隐藏字段中。

    简而言之,您只需控制此功能是否会被第 4 个参数调用。

希望有帮助:)

于 2013-11-11T21:39:52.807 回答