Symfony 1.4将变量从操作传递到视图

时间:2013-05-14 12:01:31

标签: php symfony-1.4

我是Symfony 1.4 NEWBIE,我正在加入一个需要创建新仪表板的项目。

我在 analyze / actions / actions.class.php中创建了以下控制器

public function executeTestDashboard(sfWebRequest $request){

    $foo = "FooBar";
    $this->foo = "ThisFooBar";
    return $this->renderPartial('analyse/testDashboard', array('foo' => $foo);

}

analyze / templates / _testDashboard.php 视图,这是home / templates / indexSuccess.php中的一部分:

<div class="testDashboard">
        <h1>TEST</h1>
        <?php var_dump($foo);?>
</div>

它不起作用,$ foo既不是“FooBar”也不是“ThisFooBar”,而是“null”。我该怎么办才能让它发挥作用? (或者甚至检查我的executeTestDashboard控制器是否被处理?)

2 个答案:

答案 0 :(得分:2)

以下是一些可以向您解释的示例:

// $foo is passed in TestDashboardSuccess.php, which is the default view rendered.
public function executeTestDashboard(sfWebRequest $request)
{
    $this->foo = "ThisFooBar";
}

// Different template indexSuccess.php is rendered. $foo is passed to indexSuccess.php
public function executeTestDashboard(sfWebRequest $request)
{
    $this->foo = "ThisFooBar";
    $this->setTemplate('index');
}

// Will return/render a partial, $foo is passed to  _testDashboard.php. This 
// method is often used with ajax calls that just need to return a snippet of code
public function executeTestDashboard(sfWebRequest $request)
{
    $foo = 'ThisFooBar';

    return $this->renderPartial('analyse/testDashboard', array('foo' => $foo));
}

答案 1 :(得分:1)

您应该阅读Symfony 1.4中的partialscomponents。如果您使用include_partial()在模板中包含部分内容,则只显示部分内容并且不执行控制器代码。

如果你需要更多逻辑而不是简单渲染部分,你应该使用一个组件,它看起来像:

analyse/actions/compononets.class.php

中的

public function executeTestDashboard(){

    $this->foo = "FooBar: ".$this->getVar('someVar');
}
analyse/templates/_testDashboard.php

中的

<div class="myDashboard><?php echo $foo ?></div>

在任何其他模板文件中,您希望显示仪表板:

include_component('analyse', 'testDashboard', array('someVar' => $someValue));