如何将JS代码添加到实体窗体



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

你可以

这样做:-

  1. 在FormMapper中添加一个类参数,如下所示:

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

  2. 从奏鸣曲 CRUD 模板扩展edit.html.twig/base_edit.html.twig

---编辑.html.twig----

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

---base_edit.html.树枝---

{% 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="WyzbizBundleMainBundleAdminBfAdmin">
    <tag name="sonata.admin" manager_type="orm" group="Content" label="BFs"/>
    <argument />
    <argument>WyzbizBundleMainBundleEntityBf</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>

@Jessica 与其在管理员类的 configureFormFields 方法中使用 $this->setTemplate(),不如添加自己的 getTemplate 方法实现,我的看起来像这样:

/**
 * 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;
    }
}

最新更新