Symfony – jQuery Prototype clash

3 Wochen Symfony-Entwicklung liegen jetzt hinter mir und ich befinde ich mich in einer Art wohligem Wahn. Die Arbeit mit Symfony macht einfach richtig viel Spaß. Immer noch im Zeitplan, packt einem da schon einmal der Übermut. So war heute klar: Mehr Ajax braucht der Anwender! Das geht mit Symfony so schnell, dass mir erst gegen 20 Uhr auffiel, was ich da für einen Mist fabriziert hatte.

Beim Einbinden meines neuen Moduls in ein recht komplexes Formular schnellen die JavaScript-Fehler in Firebug plötzlich auf stolze 20. Ein Blick auf die Fehlermeldungen: Alle Autocomplete-Felder, umgesetzt mit einem erweiterteten sfWidgetFormJQueryAutocompleter-Widget, welches auf jQuery basiert, sind betroffen. Autocomplete getestet: Nix mehr Autocomplete. Das war der Moment in dem mir klar wurde, dass ich etwas zu leichtsinnig mit dem Einbinden von JavaScript-Frameworks umgegangen war.

Der Zeitplan geriet ins wanken und meine Stimmung stark abzusacken. Zum einen basieren die in Symfony integrierten JavaScript-Helper auf Prototype, zum anderen wird an diversen Stellen, etwa im sfFormExtraPlugin oder im Jobeet-Tutorial, mit jQuery gearbeitet. Nun sollte von Seiten Symfony auf keinen Fall das Festlegen auf ein Framework statt finden, aber von Seite des Entwicklers sehr wohl, wie mir dämmerte. Also, meinen Verdacht auf den Punkt gebracht: Prototype und jQuery kommen sich gehörig in die Quere. Ich hatte in meinem Wahn aber einfach das Beste von beiden übernommen.

Direkt der erste Treffer meiner Suche bestätigt meine Vermutung. Sowohl jQuery, als auch Prototype nutzen das $-Zeichen als Funktionsnamen. Lösungen des Problems war schnell gefunden, nach 21 Uhr Feierabend sah das mir aber nicht mehr aus. Doch ich irrte mich, um 21 Uhr sollte ich auf dem Heimweg sein.

Die schnelle Lösung verdanke ich dem Plugin sfJqueryReloaded. Dieses liefert zum größten Teil jQuery-Pendante für die von Symfony angebotenen Prototype-Helper. Aus meiner genutzten Funktion submit_to_remote wird dann einfach jq_submit_to_remote und im Handumdrehen war Prototype überflüssig.

Wichtig ist es das Plugin in Version 1.2.2 zu installieren, da sich in der 1.1.6 Version ein Bug befindet, durch den die Formular-Inhalte nicht übergeben werden:

symfony plugin:install sfJqueryReloadedPlugin --release=1.2.2

Schön, und weiter geht es mit der Ajaxifizierung!