如何在Symfony 1中从另一个动作渲染动作

时间:2012-11-15 19:14:13

标签: php symfony1 class-visibility

我使用的是版本1.0.17的Symfony应用程序,目前无法升级。

现在有一个页面包含一个iframe,它从同一个模块加载不同操作的网页。 iframe也会导致一些设计问题和一些用户体验问题,所以我想摆脱它,只是直接在页面中从iframe渲染HTML。

我无法弄清楚如何执行另一个操作并将视图模板呈现为一个我可以分配给调用操作视图的变量。

我已经尝试了getPresentationFor(),但是这会导致调用页面上出现404,异常或致命错误,具体取决于我的尝试方式。

我想我需要将代码放在动作的execute方法中。控制器是sfAction对象。如果我致电$this->getController(),我会收到sfWebController个对象。

通话:

$this->getController()->getPresentationFor('module', 'ContactIframeAction');

结果在空白页面;在该调用之后的任何代码都没有被执行但如果我在它之前输出一些东西我可以在页面上看到它。服务器错误日志中没有错误。

通话:

$this->getController()->getPresentationFor('module', 'ContactIframe');

只是让我们的404页面显示出来,所以我认为之前的调用更接近我想要的。

有没有办法从另一个动作的代码渲染另一个动作的输出?

感谢。

1 个答案:

答案 0 :(得分:1)

可能是

$this->theContent = $this->getController()->getPresentationFor('module', 'contactIframe'); // minus 'c'

使用:

// modules/mymodule/actions/actions.class.php
class myPageActions extends sfActions {

    public function executeIndex() {
        // ...
        $this->theContent = $this->getController()->getPresentationFor('module', 'contactIframe');                  
    }
}

// modules/mymodule/templates/indexSuccess.php
<?php echo $theContent ?>