Symfony:是否可以为组件设置模板?

10

组件中没有setTemplate()方法!我知道,但也许有其他方法可以实现吗?

(该问题似乎与一个 PHP 框架有关:http://www.symfony-project.org/

4个回答

10

在sfComponents上没有setTemplate方法。您基本上有三个选择:

  1. 将组件命名为要呈现的部分的名称。如果您想共享相同的模板,这可能不可行。
  2. 创建与组件名称相同的部分,并在其中包含该部分。也就是说,如果您有一个具有executeFoo()方法的组件,您想呈现_bar.php模板,只需在_foo.php中调用include_partial('bar', $vars)
  3. 加载PartialHelper并在组件的执行方法内手动呈现部分,然后让组件返回sfView::NONE。

但是要注意,在组件中返回sfView::NONE将不会缓存该组件,至少在1.0版本中是这样的——一定要检查缓存文件是否仍然生成。 - timmow
你确定即使在其中渲染文本,该组件仍然不会被缓存吗?如果是这样,那么是的,如果您想要可缓存的组件,请不要使用方法3(我自己从来没有使用过方法3)。 - Jeremy Kauffman
1
在Symfony 1.4中,您必须使用include_partial('bar', $vars)而不是include_partial('bar', $args) - chiborg

6

组件不处理模板,你只能使用部分视图。如果你需要在组件类内返回特定的部分视图,可以像这样操作:

return get_partial('module/action', array('paramName' => $paramValue));

请查看symfony书籍,第7章视图层。 点击此处

6
为了解决这个问题,我正在做以下操作:
echo get_component('module', 'action', $this->getVarHolder()->getAll());
return sfView::NONE;

这让我省了很多空模板文件。 - Lg102
我曾经苦恼于 return get_partial('module/partial'); 但这只是不能绕过组件的常规模板。现在,多亏了这个回答,它对我来说就像这样工作: echo get_partial('module/partial'); return sfView::NONE; - Aitor

0
这对我有用:
$this->setVar('template', 'templateName');

显然,模板必须在完全相同的模块中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接