同一symfony应用程序中不同视图的不同布局

时间:2011-05-17 19:58:27

标签: templates layout symfony1

我有一个带有单个应用程序frontend的symfony 1.4项目。此应用程序具有单个模块book,其中包含单个操作index

我有两个模板用于索引操作:indexSuccess.mobile.phpindexSuccess.html.php。该操作将设置格式以便调用这些模板中的一个或另一个。

我想为这两个模板中的每一个使用不同的布局:layout.mobile.phplayout.html.php。文件apps/frontend/modules/book/config/view.yml文件用于指定要使用的布局以及布局中包含的CSS和JavaScript文件。

由于每个模块只能有一个view.yml文件,如何配置view.yml以便indexSuccess.mobile.php使用layout.mobile.php并加载相应的CSS和JS文件,同时indexSuccess.html.php使用layout.html.php并加载相应的CSS和JS文件?

我想使用布局,因为我最终会向此模块添加更多动作/模板。

3 个答案:

答案 0 :(得分:4)

您可以使用行动的setLayout()方法来实现此目的。 对于css和js文件,更新,您也可以使用该操作(调用sfWebResponse::addStylesheet()sfWebResponse::addJavascript())。 如果您绝对想要从view.yml完成所有这些操作,最好的方法是更改​​模板名称(在操作中返回不同的后缀)

答案 1 :(得分:0)

我没有测试过,但似乎就是这样:

<?php
    // in indexSuccess.mobile.php
    decorate_with('layout.mobile');

答案 2 :(得分:0)

我可能会迟到回答这个问题,但我认为这可能对某人有所帮助,因为如果他们被要求像我一样处理这些旧版本(例如 symfony 1.4),他们的运气不好。

您可以为每个动作指定布局文件。所以解决方案是将 layout 和 my_layout 放在 apps/frontend/templates 目录中,并在 apps/frontend/modules/book/config/view.yml 中定义布局配置,如下所示:

indexSuccess:
 layout: my_layout

mobileSuccess:
 layout: layout

有关详细信息,请查看 this 链接中的“布局配置”