6

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

2 Answers 2

7

You can do it this way:-

  1. 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)) }

  2. 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>
Sign up to request clarification or add additional context in comments.

4 Comments

base_edit should extend sonata crud template? I should specify extending tag in this template or I just can place this template same path as in sonata bundle? Thank you for your help
Don't touch anything in Sonata. Just copy sonata's base_edit.html.twig into your YourBundle/Resources/YourController/ folder. I'll update the answer to explain how.
Sonata has apparently replaced the getEditTemplate() function with getTemplate('edit'), making this more difficult. What I ended up doing was: $this->setTemplate('edit', 'MyBundle:Admin:edit_user.html.twig'); inside my admin's configureFormFields()
Also, your edit.html.twig file can extend sonata admin's CRUD edit.html.twig and can contain the javascript block (in other words, you don't need to create your own version of base_edit.html.twig and extend it, just extend Sonata admin's edit.html.twig directly)
3

@Jessica Instead of using $this->setTemplate() inside the configureFormFields method of your admin class, you can instead add your own implementation of the getTemplate method, mine looks like this:

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.