【问题标题】:How to add JS code to entity form?如何将JS代码添加到实体表单?
【发布时间】:2012-04-25 21:58:47
【问题描述】:

我有一个实体。当实体在弹出窗口中加载时,我需要执行一些 JS 代码。 有没有办法通过管理类配置将自定义 JS/HTML 代码添加到实体表单。例如。将模板作为选项传递

【问题讨论】:

    标签: symfony symfony-sonata


    【解决方案1】:

    你可以这样做:-

    1. 像这样在你的 FormMapper 中添加一个类参数:-

      受保护的函数 configureFormFields(FormMapper $formMapper) { $formMapper ->add('description', null, array('attr' => array('class' => 'for_popup'), 'required' => false)) }

    2. 从 Sonata CRUD 模板扩展 edit.html.twig / base_edit.html.twig

    ---edit.html.twig----

    {% extends 'YourBundle:YourAdminClass:base_edit.html.twig' %}
    

    ---base_edit.html.twig---

    {% block javascripts %}
        {{ parent() }}
        <script type="text/javascript">
            // Your JS code here
        </script>
    {% endblock %}
    

    使用您的edit.html.twig 代替 Sonata CRUD,方法是在 getEditTemplate 函数中定义它(在您的 Admin 类中)。

    public function getEditTemplate() 
    {
        return 'YourAdminBundle:ControllerName:edit.html.twig'; 
    }
    

    您还可以在注入管理服务时设置自定义编辑模板。

    <service id="sonata.admin.bf" class="Wyzbiz\Bundle\MainBundle\Admin\BfAdmin">
        <tag name="sonata.admin" manager_type="orm" group="Content" label="BFs"/>
        <argument />
        <argument>Wyzbiz\Bundle\MainBundle\Entity\Bf</argument>
        <argument>WyzbizMainBundle:CRUD</argument>
        <call method="setTranslationDomain"><argument>WyzbizMainBundle</argument></call>
        <call method="setTemplate"><argument>list</argument>                       
        <argument>WyzbizMainBundle:CRUD/Bf:list.html.twig</argument></call>
    </service>
    

    【讨论】:

    • base_edit 应该扩展奏鸣曲 crud 模板吗?我应该在这个模板中指定扩展标签,或者我可以把这个模板放在与奏鸣曲包中相同的路径?感谢您的帮助
    • 在奏鸣曲中不要碰任何东西。只需将奏鸣曲的 base_edit.html.twig 复制到 YourBundle/Resources/YourController/ 文件夹中。我将更新答案以解释如何。
    • Sonata 显然已经用 getTemplate('edit') 替换了 getEditTemplate() 函数,这使得这变得更加困难。我最终做的是: $this->setTemplate('edit', 'MyBundle:Admin:edit_user.html.twig');在我管理员的 configureFormFields() 中
    • 此外,您的 edit.html.twig 文件可以扩展奏鸣曲管理员的 CRUD edit.html.twig 并且可以包含 javascript 块(换句话说,您不需要创建自己的 base_edit 版本.html.twig 并扩展,直接扩展 Sonata admin 的 edit.html.twig 即可)
    【解决方案2】:

    @Jessica 您可以添加自己的 getTemplate 方法实现,而不是在管理类的 configureFormFields 方法中使用 $this->setTemplate(),我的方法如下所示:

    /**
     * Override core method to display custom template(s)
     */
    public function getTemplate($name)
    {
        switch ($name) {
            case 'edit':
                return 'YourAdminBundle:YourAdminEntity:edit.html.twig';
                break;
            default:
                return parent::getTemplate($name);
                break;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-18
      • 2011-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多