Integrar librería jquery en en un formulario de symfony 3

Buenas,

Tengo un problema a integrar las librerias chosen y select2 en mi vista que lleva compos languageType y ChoiceType de modo que los campos sean autocomplete .

El problema es implemntar los assets con el codigo js y css que no lo reconoce .

Me podeis explicar paso a paso si es posible el modo para implementarlo en mi twig y como llamarlo en mi formulario.

Creo que habria que activar los assetic cosa que he hecho pero no me funciona aun.

Perdonarme soy un novato.

Muchas gracias.

Respuestas

#1

Debes hacer lo siguiente:

  1. Incluir los assets (js/css) necesarios de las diferentes librerías que utilices. Basicamente meter las etiquetas y que necesiten las librerías. Asegurate de cargarlas despues de cualquier librería jQuery que tengas, etc. Personalmente suelo incluir un bloque "javascripts" y "estilos" en mi plantilla base, que extiendo en las diferentes vistas de mi aplicación, y luego hago algo como
    {% block javascripts %}
    {{ parent() }}
    <script src="{{ asset('js/miLibreria.js') }}"></script>
    {% endblock javascripts %}
  2. La librería chosen en particular no la he usado nunca, pero select2 si. Lo que debes hacer es en tu formulario en el campo con tipo ChoiceType, añadir la clave 'attr' con un array que contenga la clave 'class' y ahí meter la clase 'select2'.
    $form->add('mi_desplegable', ChoiceType::class, array(
    'attr' => array(
        'class' => 'select2'
    )
    ));

    Lo que haces con esto es añadir el atributo "class" con el valor de "select2" al desplegable. Podrías hacerlo en la vista directamente si fuera necesario.

    {{form_row(form.mi_desplegable, {'attr': {'class': 'select2'}}) }}
  3. Por último en tu vista, o en los javascripts de tu aplicación ejecutar
    jQuery(".select2").select2();

    NOTA: Ten en cuenta que si es un formulario que se va creando cuando pulsas un botón o cargas via ajax, etc, deberás llamar al inicializador del select2 una vez se cargue el contenido.

Espero haberte ayudado.

Un saludo

#2

-