我是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控制器是否被处理?)
答案 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中的partials
和components
。如果您使用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));