【问题标题】:Symfony: Is it possible to setTemplate for components?Symfony:是否可以为组件设置模板?
【发布时间】:2010-12-09 10:08:36
【问题描述】:

组件没有 setTemplate() !我知道,但也许还有其他方法可以做到这一点?

(问题似乎是关于一个php框架:http://www.symfony-project.org/

【问题讨论】:

    标签: php symfony1


    【解决方案1】:

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

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

    【讨论】:

    • 但要注意在组件上返回 sfView::NONE 不会缓存组件,至少在 1.0 中 - 绝对值得检查缓存文件是否仍然生成
    • 您确定即使在其中呈现文本,该组件仍不会被缓存?如果这是真的,那么是的,如果您想要一个可缓存的组件,请不要使用方法 3(我自己从未使用过方法 3。)
    • 使用 Symfony 1.4 你必须使用include_partial('bar', $vars) 而不是include_partial('bar', $args)
    【解决方案2】:

    组件不处理模板,您只能使用部分。如果您需要从组件类中返回特定的部分,您可以执行以下操作:

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

    查看symfony book, chapter 7 view layer

    【讨论】:

      【解决方案3】:

      为了解决这个问题,我正在做:

      echo get_component('module', 'action', $this->getVarHolder()->getAll());
      return sfView::NONE;
      

      【讨论】:

      • 这为我节省了一堆空模板文件。
      • 我在return get_partial('module/partial'); 上苦苦挣扎,但这不会绕过组件的常规模板。现在感谢这个回复,它对我来说就像这样:echo get_partial('module/partial'); return sfView::NONE;
      【解决方案4】:

      这对我有用:

      $this->setVar('template', 'templateName');
      

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

      【讨论】:

        猜你喜欢
        • 2011-04-21
        • 2018-09-04
        • 2020-06-24
        • 2012-02-19
        • 2010-11-04
        • 1970-01-01
        • 2021-06-19
        • 1970-01-01
        • 2014-12-13
        相关资源
        最近更新 更多