How to add JS code to entity form?

symfony, symfony-sonata

Solution

You can do it this way:-

Add a class parameter in your FormMapper like this:-

protected function configureFormFields(FormMapper $formMapper) { $formMapper ->add('description', null, array('attr' => array('class' => 'for_popup'), 'required' => false)) }

Extend the `edit.html.twig` / `base_edit.html.twig` from Sonata CRUD Templates

---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 %}

Use your `edit.html.twig` instead of Sonata CRUD's by defining it in the getEditTemplate function (within your Admin class).

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

You can also set the custom edit template when you inject the admin service.

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

Problem

I have an entity. I need to execute some JS code when entity loads in a popup. Is there any way to add a custom JS/HTML code to an entity form via admin class configuration. E.g. to pass a template as an option

Original source