如何将JS代码添加到实体表单?

时间:2012-04-13 14:14:59

标签: symfony symfony-sonata

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

2 个答案:

答案 0 :(得分:7)

你可以这样做: -

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

    protected function 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

  3. --- 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>
    

答案 1 :(得分:3)

@Jessica而不是在管理类的configureFormFields方法中使用$ this-&gt; 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;
    }
}