【问题标题】:Symfony2 :: Add assets when a custom formtype is loadedSymfony2 :: 在加载自定义表单类型时添加资产
【发布时间】:2014-02-19 18:17:56
【问题描述】:

我创建了一个用于加载自定义表单类型的服务。 但是,每当我调用此服务时,是否有可能自动将一些 javascript 自动加载到我的块 'footer_javascripts' 中?因为我不想每次都加载所有的javascript。

目前,我正在这样做:

{% block wysiwyg_widget %}
    {% block footer_javascripts %}
       <script src="{{ asset('bundles/acme/js/demo/demo1.js') }}"></script>
       <script src="{{ asset('bundles/acme/js/demo/demo2.js') }}"></script>
   {% endblock %}
{% endblock %}

但是现在代码在内容中,我希望它在块 'footer_javascript' 中并且调用 {{ parent() }} 不起作用。

提前致谢

【问题讨论】:

  • 如果用户访问了另一个页面(在使用自定义表单类型查看您的页面之前),加载所有 Javascript 不是问题,因为 JS 文件将被缓存。
  • 无论如何,为什么要使用嵌套块?他们的角色是什么?
  • 哈哈好吧,所有的 JS 都被缓存了?因此,我稍后或在开始时加载它并不重要。嵌套块只是我的临时解决方案。
  • 理论上是的,JS应该被缓存,浏览器不应该一次又一次地下载相同的文件。
  • 您是否为自定义表单类型使用特定模板?

标签: javascript php symfony twig


【解决方案1】:

您可以combine your Javascript files(以及 CSS 文件)来减少 HTTP 请求的数量。

您可以使用变量来决定是否需要加载 Javascript。

首先,在你的控制器上定义它:

public function homepageAction($no_locale = false)
{
    [...]

    $customFormType = null;

    if (/* test if you used the custom form-type */)
    {
            $customFormType = true;
    }

    return $this->render('SCACWebsiteBundle:Default:homepage.html.twig',
        array(
            'form' => $form,
            'customFormType ' => $customFormType
        )
    );
}

然后就可以在Twig中测试变量了:

{% if ((customFormType is defined) and (customFormType)) %}
    {% javascripts
        'bundles/acme/js/demo/demo1.js'
        'bundles/acme/js/demo/demo2.js' %}
        <script src="{{ asset_url }}"></script>
    {% endjavascripts %}
{% endif %}

通过使用(customFormType is defined),您无需在所有控制器中声明变量。此测试可确保在未定义变量的情况下不会出错。条件(customFormType) 仅在将加载自定义表单类型时才为真,即使它是同一个控制器,有或没有自定义表单类型。如果未加载自定义表单类型,customFormType 将具有 null 值,条件结果将为 false。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-30
    相关资源
    最近更新 更多