Tutos & Astuces

jQuery Address Picker & Symfony2 : Google Maps dans vos formulaires !

Il y a quelques jours, je vous ai expliqué comment intégrer Google Maps dans vos entités Doctrine, maintenant voici comment l’intégrer facilement et proprement dans vos formulaires ! Avant de...

Il y a quelques jours, je vous ai expliqué comment intégrer Google Maps dans vos entités Doctrine, maintenant voici comment l’intégrer facilement et proprement dans vos formulaires !

Avant de commencer, je vous conseille de jeter un oeil sur la doc officielle concernant les formulaires virtuels.

De quoi avons nous besoin ?

Pour intégrer Google Maps dans nos formulaires, nous allons utiliser le plugin jQuery Address Picker. Ce plugin nous permet en tapant simplement l’adresse souhaitée de récupérer les informations suivantes :

  • Locality (La ville)
  • Country (Le pays)
  • Lat (La latitude)
  • Lng (La longitude)

Pour tester votre code, faites une entité de la même forme que dans cet article.

Le formulaire virtual

Bien ! Maintenant que nous savons ce qu’il nous faut, nous allons créer notre FormType de type virtual que nous allons appeler gmap_address :

<?php
namespace My\UtilsBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
use Symfony\Component\Form\FormBuilderInterface;

/**
 * GMapAddressType
 *
 * @author Sullivan SENECHAL
 */
class GMapAddressType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
                ->add('address', null, array(
                    'required'      => true,
                ))
                ->add('locality', 'hidden', array(
                    'required'      => false,
                ))
                ->add('country', 'hidden', array(
                    'required'      => false
                ))
                ->add('lat', 'hidden', array(
                    'required'      => false
                ))
                ->add('lng', 'hidden', array(
                    'required'      => false
                ))
        ;
    }

    public function getDefaultOptions(array $options)
    {
        return array(
            'virtual'   => true, // Ici nous précisons que notre FormType est un champ virtuel
        );
    }

    public function getName()
    {
        return 'gmap_address'; // Le nom de notre champ, il sera utilisé après
    }
}

?>

Vous remarquez que tout les champs sauf ‘address’ sont cachés, c’est tout simplement pour faire un formulaire simple avec le champ éditable de l’adresse et la carte juste en dessous, vous pouvez  bien sur les changer ! 😉

Le template twig

Créer un champ virtuel n’est pas tout, notre formulaire sera un peu spécial vu qu’il intégrera une carte Google Maps. Il faut donc le préciser en créant un template comme suit :

{# src/My/UtilsBundle/Resources/views/Form/fields.html.twig #}

{% block gmap_address_widget %}
<div id="{{ id }}_gmap_address_widget"></div>
<div id="{{ id }}_input">{{ block('form_widget') }}</div>
<div id="{{ id }}_map" class="gmap_address_map"></div>

<script type="text/javascript">
$(function() {
            var addresspickerMap = $("#{{ form.address.get("id") }}").addresspicker({
                regionBias: "fr",
                elements: {
                    map: "#{{ id }}_map",
                    locality: '#{{ form.locality.get("id") }}',
                    country:  '#{{ form.country.get("id") }}',
                    lat:      "#{{ form.lat.get("id") }}",
                    lng:      "#{{ form.lng.get("id") }}"
                }
            });
            var gmarker = addresspickerMap.addresspicker("marker");
            gmarker.setVisible(true);
            addresspickerMap.addresspicker("updatePosition");
	});
</script>
{% endblock %}

Votre block doit s’appeler gmap_address_widget afin d’être utilisé par votre FormType gmap_address.

Ce template se sépare en deux parties, le code html où sont générés nos champs de formulaire avec un div pour la carte gmap ainsi qu’un code javascript pour activer le plugin jQuery Address Picker sur le champ d’adresse (voir la démo sur github).

Ici on se sert de la variable id, générée lors de la création de vos formulaires, on peut aussi récupérer les ids de chaques field, comme ici ou ils sont passés en paramètre dans les configurations du plugin.

Je ne me suis pas attardé sur la personalisation des champs en utilisant juste form_widget, ce qui nous donne déjà un très bon résultat, libre à vous de le changer ! 🙂

N’oubliez pas d’ajouter votre template dans votre fichier config.yml !

twig:
    debug:            %kernel.debug%
    strict_variables: %kernel.debug%
    form:
        resources:
            - 'MyUtilsBundle:Form:fields.html.twig'

Déclaration en tant que service

Afin d’augmenter la simplicité d’utilisation de votre champ virtual, nous allons le déclarer sous forme de service, voici un exemple en xml :

<?xml version="1.0" ?>

<container xmlns="http://symfony.com/schema/dic/services"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

    <parameters>
        <parameter key="form.type.gmap_address.class">My\UtilsBundle\Form\Type\GMapAddressType</parameter>
    </parameters>

    <services>
        <service id="form.type.gmap_address" class="%form.type.gmap_address.class%">
            <tag name="form.type" alias="gmap_address" />
        </service>
    </services>
</container>

Ne pas oublier de préciser le tag form.type avec comme alias gmap_address !

Vous pouvez obtenir plus d’informations sur la déclaration d’un Type en tant que service sur cette page.

Intégration dans un formulaire

Voila notre extension de formulaire est prête ! Il n’y a plus qu’à l’utiliser dans notre FormBuilder, pour cela rien de plus simple ! Il suffit simplement de le spécifier de cette facon :

// src/My/MainBundle/Form/Type/PlaceType.php
namespace My\MainBundle\Form\Type;

use Symfony\Component\Form\FormBuilderInterface;

class PlaceType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('address', 'gmap_address', array(
            'data_class' => 'My\MainBundle\Entity\Place',
        ));
    }
}

A noter qu’il faut à chaque fois préciser l’option data_class, nécessaire pour appliquer les données à l’entité concernée. Votre Entity doit donc contenir des attributs identiques à votre FormType.

Importation du plugin dans le layout

Il ne vous reste plus qu’à générer votre formulaire pour voir le résultat, mais avant vous devez ajouter deux choses dans votre layout principal, le plugin javascript et l’api google map, ajoutez-les dans les balises <head> :

<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
<script type="text/javascript" src="/path/to/jquery.ui.addresspicker.js"></script>

Conclusion

C’est normalement tout ce que vous devez savoir, si vous n’avez pas tout compris ou que vous avez une meilleure solution, faites le nous savoir par commentaire ! 😉

Je pense plus tard faire un bundle permettant d’intégrer plusieurs extensions jQuery de ce genre, je vous tiens au courant si ce projet voit le jour, en attendant je vous conseille celui de genemu qui vous propose pas mal d’options ! 😉

Share on Facebook0Tweet about this on TwitterShare on Google+0Share on LinkedIn0
  • Gauthier Josson

    Merci ne serait ce que pour le lien sur les forms virtuels 😉

    • Soullivaneuh

      Par curiosité, tu comptes te servir des formulaires virtuels dans quel but ? 🙂

  • Pingback: jQuery Address Picker & Symfony 2 - Cyril Chandelier()

  • trekiteasy

    Super, merci !
    (Et au passage, ça m’a permit de découvrir que l’utilisation de bootstrap dénaturait l’affichage des composants Google Maps… réglé simplement comme vu sur http://bit.ly/zflkTS )

    • Soullivaneuh

      Oui j’avais eu ce soucis, réglé en ajoutant une règle max-width: 100% d’après mes souvenirs, c’est ce qu’ils ont officiellement fait d’ailleurs ! ^^

  • Bonjour, je viens de voir ton tuto qui est très interressant.

    Après l’avoir suivi, je me retrouve avec une notification :

    Could not load type « gmap_address »

    500 Internal Server Error – FormException

    et je ne vois pas trop d’ou provient l’erreur.

    comment je l’ai installé:

    1)G défini la « Mapped Supperclass Google Maps » comme dans ton tuto

    2) g rajouté à mon Entity user:
    -use TestTestBundleEntityAbstractGMapEntity;
    -extends AbstractGMapEntity

    puis je suis passé à la 2eme etape du tuto:

    1°) g créé le formulaire virtual que j’ai placé dans MyUtilsBundleFormType avec le nom : gmap_address.php (peut etre que c’est GMapAddressType.php ???? g essayé sans succès)

    2°) J’ai créé la vue {# src/My/UtilsBundle/Resources/views/Form/fields.html.twig #}

    3°)j’ai rajouté dans le fichier app/config/config.yml les lignes préconisées par ton tuto

    4°)j’ai créé le fichier services.xml que j’ai placé dans MyUtilsBundleconfig; j’ai essayé aussi de le mettre dans app/config mais rien ne change tjs la meme erreur

    5°)j’ai intégré dans mon form UserType en y rajoutant:

    ->add(‘address’, ‘gmap_address’, array(

    ‘data_class’ => ‘MyMainBundleEntityPlace’,

    )) à la suite de ce que j’avais déjà

    6°) j’ai importé les 2 lignes dans mon layout ou je veux y intégrer ce formulaire :

    j’ai rajouté à l’emplacement ou je veux voir ce formulaire:

    {% block gmap_address_widget %}

    {% endblock %}

    puis essayé aussi {% include ‘DpUtilsBundle:Form:fields.html.twig’ %} mais rien n’y fait

    j’ai toujours en erreur:

    Could not load type « gmap_address »

    500 Internal Server Error – FormException

    Etant débutant en symfony2, je dois mal comprendre qqchose et c’est pourquoi je te sollicite

    Merci pour ton aide

    Marc

    • Soullivaneuh

      Bonjour marc,

      Déjà, quelques corrections :
      – Le fichier doit avoir le même nom que la classe, soit GMapAddressType.php
      – MyUtilsBundle, c’est juste un namespace d’example, à toi de le configurer à ta guise.
      – De ce fait, le services.yml ne doit pas forcément être dans MyUtilsBundleconfig, regarde dans le répertoire Resources/config de ton bundle, tu devrais déjà avoir un services.yml dedans, ajoute les lignes nécessaire.

      Ton bug doit certainement être lié à ton service qui n’est pas chargé, essayes de revoir ton code avec ce que je t’ai dis et tiens moi au courant ! 😉

      Si tu as du mal avec les injections de dépendances, je te conseil un peu de lecture sur le site officiel, par exemple pour les services : http://symfony.com/fr/doc/current/book/service_container.html 🙂

      • Bonjour Soullivaneuh,

        déjà, merci pour ta réponse rapide.

        je réponds a tes question dans l’ordre :

        – oui, mon fichier à le meme nom que ma classe donc,GMapAddressType.php

        – oui, j’ai mis cela pour t’expliquer mais j’ai bien:namespace DpUtilsBundleFormType;

        – mon erreur vient de là surement car comme un imbécile, j’ai créé un fichier service.xml !!!! je pensais qu’il séparait les types .xml de yml.

        donc je corrige et te dis çà

        merci encore 😉

        Marc

        • j’ai rajouté en faisant un copier coller comme çà mais çà me sort une erreur; donc je vais voir pour transformer le xml en langage yml non ??

          • Soullivaneuh

            Rien à voir, les deux fonctionnent, tant que tu le précise bien dans ta classe d’extension.

            Quelle est ton erreur cette fois-ci ?

            Ou est exactement placé ton services.yml ? Je peux voir le contenu complet ? Tu peux le faire ici : http://pastebin.com/

          • je finalise qques trucs pour bien revérifier tout ce que j’ai fais. et je reviens vers toi 😉
            merci

          • je t repondu sur ton lien 🙂

          • vois tu mon code ?

          • car g besoin d’aide pour finaliser et surtout comprendre comment est son fctionnement sous symfony2

          • Soullivaneuh

            Ton fichier de services a l’air bon.

            Du coup ca ne rale plus mais ça n’affiche rien ?

            Tu peux me passer ta classe GMapAddressType ainsi que ta classe Form qui fait appel à ce champ stp ?

          • http://pastebin.com/GvaWmFRY

            copy du code de ma page web

          • Soullivaneuh

            Tes champs hidden sont bien la, le soucis vient peut-etre du javascript.

            Peux tu regarder ce que dit le débogueur js de ton navigateur ?

          • Salut, je t’ai tout mis sur http://pastebin.com/XQmYdzLb
            merci

          • Soullivaneuh

            Uncaught TypeError: Object function (a,b){return new e.fn.init(a,b,h)} has no method ‘widget’ jquery.ui.addresspicker.js:17 : Il sagit bien la d’une erreur js.

            Cela vient de la lib jqueryUI, regarde si la lib jquery est bien inclue avant jqueryUI et essaye de chercher cette erreur sur google ! 😉

            Tu utilises quelles versions de jquery et jqueryUI ?

          • ok, merci, je cherche et te tiens au courant 🙂

          • Soullivaneuh

            Salut Marc,

            As-tu réglé ton problème ?

          • Marc

            Salut soullivaneuh,
            Oui super, ton aide m’a ete tres precieuse et je te remercie enormement pour cela. Tout fctionne nickel SAUF ke j’ ai les icons (marker, zoom, ..) ne s’affiche pas sur la carte.
            J’ai rajouté les images dans mon rep img de symfony, ke dalle
            j’ai rajouté et tjs ke dalle

          • petite question, j eme pose la question sur l’affichage d’une ou plusieurs adresse sur la carte google maps; est ce que l’a déjà pratiqué??

            J’ai regardé la solution sur ggole developpers et j eme demande si je peux utiliser leur methode sur symfony2 ou il y a t il qqchose de spécifique à effectuer pour cela?

            @+ 😉 sulli

          • Soullivaneuh

            Non jamais essayé, aucune idée pour ça…

          • sentem

            Bonjour Soullivaneuh,

            Je suis tombé sur ton article et ca répond à ce que je veux mettre en place sur mon site avec symfony2. Je l’ai mis en oeuvre et j’ai du mal à faire afficher la carte et la complétion automatique. J’y suis depuis 4 jours et ca me gonfle de ne pouvoir trouver la réponse. Pourras-tu m’aider à trouver ce qui cloche?
            J’ai créé le formulaire virtuel, créer le twig qui modifie la zone de saisie « address », enregistrer comme service, modifier le config.yml et creer une entity qui add le champ address.

            J’envoie le form à une vue qui contient:

            {{ form_widget(form.address) }}

            J’ai juste le champ address qui apparait!

          • Soullivaneuh

            Certainement un soucis au niveau du JS, tu as bien tout inclus ? As-tu des erreurs sur la barre de debug de ton navigateur ?

          • tttim

            Bonjour, pour tout vous dire, j’ai moi aussi le même probleme dans l’affichage de la map. Seul le champ address apparait et mes .js semblent bon :

          • Soullivaneuh

            Meme réponse que pour Lalala.

          • Lalala.

            Bonjour,

            Ayant le même problème, j’ai cette erreur :

            *****************************
            ReferenceError: $ is not defined $(function() {

            *****************************
            Pour les imports :
            jquery-1.7.2.min.js
            http://maps.googleapis.com/maps/api/js?sensor=false »
            jquery-ui-1.8.20.custom.min.js
            jquery.ui.addresspicker.js

            Merci

          • Soullivaneuh

            Le probleme vient peut-etre du fait que le script soit appeler avant le chargement de la lib jQuery, inclus tu tes js en fin de fichier ?

            Il y a une meilleure methode permettant de mettre tout le code javascript en bas en separant le block javascript du block html pour le formulaire, c’est d’ailleurs plus propre mais je n’y ai pas pense de suite. Je mettrais a jour l’article asap.

          • Lalala.

            Mon erreur vient de la fonction « function » en js dans {# src/My/UtilsBundle/Resources/views/Form/fields.html.twig #}

            J’ai bien une séparation du bloc js et du bloc html.

            J’ai respecte bien l’ordre imports, les versions js semblent correspondre. Comment Marc Fonseca avait-il résous son problème ? Il semblait avoir le même problème que la plupart d’entre nous.

            Merci pour ta réponse en tous les cas. Je vais me remettre sur le problème que j’avais un peu laissé couler et si je n’y arrive pas, je ferai comme sentem et je laisserai couler…

          • sentem

            Désolé pour le long silence. Problème d’emploi du temps assez chargé. J’ai finalement laissé tomber l’affichage de la carte. Trop de temps passé à l’afficher et au final rien qui ne marche. 🙁

            Sinon pour ta question j’ai un
            ‘Uncaught ReferenceError:’ sur cette portion de code
            $(function() {

            Merci de m’avoir consacré de ton temps.

          • Hoshi

            J’ai exactement le même problème et je bloque sans en comprendre la raison.

          • Soullivaneuh

            Utiliserais-tu par hasard le twitter bootstrap pour ton site ?

          • oui, exactement;:)

          • salut Sullivaneuh, j’ai réglé le soucis en mettant :
            #…_address_map img{max-width: none;}

            tout est nickel maintenant

            GRAND MERCI à toi 🙂

          • Soullivaneuh

            J’allais te conseiller cela justement, ravi que ton soucis soit enfin réglé ! 😉

          • Youpiiii, g corrigé les erreurs et l’adresse autocomplete fonctionne

            Me reste a afficher le plan et les input ou ils mettent disable= »disable » pour ne pas pouvoir ecrire dedans mais afficher les valeurs.

            Après, j’ai vérifié les input hidden (locality country et il y a bien les infos dedans PAR CONTRE, je ne vois a aucun moment l’adresse qqpart; pas de « value » présente !!! Je vais regarder tout çà.

            Si tu as qques infos, je suis tjs preneur 🙂

            Je te remercie de m’avoir supporté dans mes recherches 😉

            Je pense que je reviendrais vers toi si je n’arrive pas a afficher le plan 🙂

            ET MERCI BCP POUR TOUT

            Si je peux faire qqchose pour toi, n’hésites pas, si je peux t’aider, je le ferais 😉

          • çà y est, je vois ma carte mais il me manque les images car le bonhomme en orange est inexistant et mon pointer est tout petit petit.
            Il doit y avoir nu fichier et des images à intégrer donc je cherche

          • Bon çà y est, j’affiche tout ce que je voulais.
            DERNIERE QUESTION :
            Les labels étant en anglais, saurais tu ou chnager le nom des labels ???

            Merci

          • Arghh, lors de l’enregistrement du form, il me mets tous les champs à NULL, il ne prend pas en compte les valeurs des input du widget !!!

          • Guest

            c bon, g trouvé, c que j’avais mis a disabled=true dans le GMapAddressType. voila, tout est presque nickel 🙂

            merci encore

          • oui, effectivement, çà ne rale plus 😉 lool
            si çà affiche le champs input address
            qd je commence à le remplir, pas d’autocomplétion
            et g pas la carte

          • Je pense que c’est dans cette partie que kje merde …

            // src/My/MainBundle/Form/Type/PlaceType.php
            namespace MyMainBundleFormType;

            use SymfonyComponentFormFormBuilderInterface;

            class PlaceType extends AbstractType
            {
            public function buildForm(FormBuilderInterface $builder, array $options)
            {
            $builder->add(‘address’, ‘gmap_address’, array(
            ‘data_class’ => ‘MyMainBundleEntityPlace’,
            ));
            }
            }

          • Soullivaneuh

            J’ai besoin du lien que te donne pastebin… 😉

          • j’avais pas vu ta reponse !!
            du coup, je l’ai fermé et je le trouve plus; je le refais 🙂

          • g rajouté qqes infos http://pastebin.com/zUnvNMSu

    • cawete

      Bonjour,
      J’ai le même problème que toi. J’ai l’erreur could not load type gmap address(500 internat error server). Pourrais tu me dire les modifications que t’as fait pour remédier à ça s’il te plait?
      Merci

      • marc

        As tu trouvé sinon je peux t’aider; dsl pour ce retard mais gt parti a l’etranger

      • Soullivaneuh

        Bonjour cawete,

        C’est que ton service n’est pas chargé, vérifie que ton fichier de conf est bien chargé par ton bundle !

  • cawete

    🙁 j’ai la même erreur que marc a eu « could’nt load type gmap_address »
    Tu peux me dire ce que t’as modifié

  • Bonjour Soullivaneuh, tout fctionne bien, il ne me reste qu’un soucis, c’est que les icons (marker, zoom, ..) ne s’affiche pas sur la carte.
    J’ai rajouté les images dans mon rep img de symfony, ke dalle
    j’ai rajouté et tjs ke dalle

    Pourrais tu me dire quoi faire pour y remedier stp 🙂

    merci

  • Re Soullivaneuh

    Je te remercie pour toute l’aide que tu m’as apporté.

    Je voudrais savoir juste uun dernier truc; mes marker, +- du zoom ne s’affiche pas sur la carte. g recherché, downlodé les images, intégré le ccs jquery.ui.css dont je n’ai aps besoin, mais toujours rien.

    T’as une soluce ? et ce sera tout pour moi, j’ai bien compris. ct pas si facile que çà.

  • Selendri

    Bonjour, merci pour ce tutoriel bien sympathique. J’ai réussi sans accroche à intégrer votre solution Jquery Address Picker pour Symfony2, à un détail près. Je n’ai pas de carte, ni l’auto-complétion mais j’ai bien le champs ‘address’. J’ai vu que dans les commentaires que le problème avait déjà été rencontrés mais il n’y avait pas la solution ? (J’ai vérifié les versions js). Autrement auriez-vous un modèle pour la vue de la form, form_widget suffit où il faut également un include de fields.twig.html ? Merci pour votre aide ^^

    • Soullivaneuh

      Bonjour Selendri,

      Un simple form_widget de ton champ suffit si tu as bien inclus ton fichier dans ta config comme indiqué plus haut.

      Pour la carte qui ne s’affiche pas, as-tu des erreurs js dans la console ? Utilises-tu bien ta clé d’api Google ?

      • Selendri

        Bonjour Soullivaneuh, merci de ta réponse !

        C’est okay pour la config. Je n’ai pas non plus d’erreurs js en console.

        Sinon, je ne vois pas où il fallait renseigner la clé de l’api google.
        Du coup, pour ce qui est de ma clé de l’api Google,voici la vue de mon form :

        {% block javascripts %}

        {% endblock %}

        {% block body_inner %}

        {% block body %}

        {{ form_widget(edit_form.address) }}

        {% endblock body %}

        Encore merci pour ton aide ^^

        A bientôt !

  • Marc

    Un ptit bonsoir en passant soullivaneuh,
    Comment vas tu?

  • etoileweb

    J’ai un problème, comment générer la variable id et quel est son contenu ? Merci

  • Je n’ai pas pu faire un extends sur ma class User car elle étend déja la class BaseUser (j’utilise FOSUserBundle). J’ai donc décidé d’intégrer les attributs de localisation directement dans la class User.

    J’ai suivi ton tuto à la lettre mais j’obtiens cette erreur :

    The form’s view data is expected to be an instance of class KsUserBundleEntityUser, but is a(n) string. You can avoid this error by setting the « data_class » option to null or by adding a view transformer that transforms a(n) string to an instance of KsUserBundleEntityUser.

    Pourtant dans la construction de mon formulaire j’ai ajouté le champa address correctement :
    $builder->add(‘address’, ‘gmap_address’, array(
    ‘data_class’ => ‘KsUserBundleEntityUser’
    ));

    Une idée du problème ?

  • Marc

    Bonjour Soullivaneuh,

    comment vas tu ?

    Je viens te solliciter car j’ai upgradé Symfony2 2.1 sur la version 2.3.7.

    j’ai une erreur sur la function:

    Method « get » for object « SymfonyComponentFormFormView » does not exist in DpUtilsBundle:Form:fields.html.twig at line 22

    var addresspickerMap = $(« #{{ form.address.get(« id ») }} »).addresspicker({

    il n’accepte plus form.address.get,

    saurais tu par quoi on le remplace ?
    je continu a chercher sur le web, si je trouve, je te donne la réponse pour updaté ton superbe tuto 😉

  • Marc

    Bonjour Soullivaneuh,

    je t’ai posté un message hier car depuis la migration de symfony2 en version 2.3.17, j’ai un plantage sur ton systeme de recherche d’adresse et je suis un ^peu perdu.

    si tu pouvais me dire si tu connais la solution ou si tu ne sais pas car là, actuellement, je ne peux plus faire de recherche.

    Merci beaucoup Soullivaneuh, tu m’enleverais une épine 😉

    bonne journée

    • Marc

      c bon, j’ai trouvé la solution, tu peux mettre a jour ton tuto:

      il faut remplacer les :

      form.address.get(« id ») par form.address.vars.id

  • Mar99

    J’ai un pépin, seulement mon champ « adresse » s’affiche (pas de carte ou d’auto completion). Tout est implémenter normalement et j’ai déjoué certaine petite erreurs. Malheureusement cela persiste !

  • Marc

    Bonjour Soullivaneuh,

    Bonne année 2014, santé et réussite

    Malheureusement,

    Pour cette nouvelle année,

    J’ai le regret de t’annoncer que ton Tuto n’est plus valide

    DANS LA PARTIE « Le template twig », il faut remplacer :

    form.address.get(« id »)

    par

    form.address.vars.id

    Il ne me reste qu’une erreur a corriger pour la mise à jour de ton tuto, ton aide serait la bienvenue

    Pb avec data_class :

    au lieu de remplcer la valeur des champs (address, LOcality, …) de l’entity principale, il rajoute l’objet principale dans le champs address et les autres valeurs (Locality, country, Lat, Lng) de l’entity principal reste à null. Ces valeurs apparaissent dans le nouvel objet ajouté au champ address !!

    Exemple de la partie ou nous voyons lors de la création d’un objet Artisan, qu’il rajoute tout l’objet dans le champs address:

    protected ‘address’ =>
    object(Dp ArtisanBundleEntityArtisan)[1328]
    private ‘id’ => null
    private ‘date_record’ =>
    object(DateTime)[1243]
    public ‘date’ => string ‘2014-01-06 13:16:22’ (length=19)
    public ‘timezone_type’
    => int 3
    public ‘timezone’ => string ‘Europe/Paris’ (length=12)
    private
    ‘date_last_modif’ => null
    private ‘verified’ => null
    private ‘user_id’ => null
    private ‘nomsociete’ => null
    private ‘slug’ => null
    private ‘genre’ => null
    private ‘type’ => null
    private ‘nom’ => null
    private ‘prenom’ => null
    private ‘portable’ => null
    private ’email’ => null
    private ‘kbis’ => null
    private ‘rcs’ => null
    protected ‘address’ => string ’22, Minnesota, États-Unis’ (length=26)
    protected ‘postal_code’ => string ‘false’ (length=5)
    protected ‘locality’ => string ‘false’ (length=5)
    protected ‘administrative_area_level_2’ => string ‘Comté de McLeod’ (length=16)
    protected ‘administrative_area_level_1’ => string ‘Minnesota’ (length=9)
    protected ‘country’ => string ‘États-Unis’ (length=11)
    protected ‘lat’ => string ‘44.8777899’ (length=10)
    protected ‘lng’ => string ‘-94.13175860000001’ (length=18)
    private ‘web’ => null
    private ‘tel_societe’ => null
    private ‘resumepresent’ => null
    private ‘presentation’ => null
    private ‘categories’ =>
    object(DoctrineCommonCollectionsArrayCollection)[1144]
    private ‘_elements’ =>
    array

    private ‘images’ =>
    object(DoctrineCommonCollectionsArrayCollection)[1489]
    private ‘_elements’ =>
    array

    protected ‘postal_code’ => null
    protected ‘locality’ => null
    protected ‘administrative_area_level_2’ => null
    protected ‘administrative_area_level_1’ => null
    protected ‘country’ => null
    protected ‘lat’ => null
    protected ‘lng’ => null

    hors qu’avant, nous obtenions :

    protected ‘address’ => string ’22, Minnesota, États-Unis’ (length=26)
    protected ‘postal_code’ => string ‘false’ (length=5)
    protected ‘locality’ => string ‘false’ (length=5)
    protected ‘administrative_area_level_2’ => string ‘Comté de McLeod’ (length=16)
    protected ‘administrative_area_level_1’ => string ‘Minnesota’ (length=9)
    protected ‘country’ => string ‘États-Unis’ (length=11)
    protected ‘lat’ => string ‘44.8777899’ (length=10)
    protected ‘lng’ => string ‘-94.13175860000001’ (length=18)

  • Val

    Bonjour,

    J’essaie d’installer le plugin addresspicker. Cependant j’ai une erreur js : » TypeError: $(…).addresspicker is not a function ».

    Pourtant j’inclus bien le script

    Est-ce que ce plugin fonctionne toujours ?

    Merci