<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ausgebloggt.de &#187; Symfony</title>
	<atom:link href="http://www.ausgebloggt.de/category/it/symfony/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ausgebloggt.de</link>
	<description></description>
	<lastBuildDate>Tue, 07 Sep 2010 14:24:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Symfony – generate:plugin =&gt; fixtures/project?!</title>
		<link>http://www.ausgebloggt.de/2010/04/26/symfony-fixturesproject/</link>
		<comments>http://www.ausgebloggt.de/2010/04/26/symfony-fixturesproject/#comments</comments>
		<pubDate>Mon, 26 Apr 2010 14:20:40 +0000</pubDate>
		<dc:creator>Andy Wesely</dc:creator>
				<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://www.ausgebloggt.de/2010/04/26/symfony-fixturesproject/</guid>
		<description><![CDATA[Da habe ich gerade nicht schlecht gestaunt. Beim Anlegen eines neuen Symfony-Plugins mit: symfony generate:plugin myPlugin wird gleich eine ganze Symfony-Projekt-Struktur angelegt. Meine Vermutung, dass es mit der Testbarkeit des Plugins zusammenhängt, hat dann dieser sehr gute Artikel bestätigt. Die &#8230; <a href="http://www.ausgebloggt.de/2010/04/26/symfony-fixturesproject/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Da habe ich gerade nicht schlecht gestaunt. Beim Anlegen eines neuen Symfony-Plugins mit:</p>
<pre>symfony generate:plugin myPlugin</pre>
<p>wird gleich eine ganze Symfony-Projekt-Struktur angelegt. Meine Vermutung, dass es mit der Testbarkeit des Plugins zusammenhängt, hat dann <a href="http://test.ical.ly/2010/02/08/bootstrap-besonderheiten-fuer-unit-tests-von-symfony-plugins/">dieser sehr gute Artikel bestätigt</a>.</p>
<p>Die Jungs machen sich Gedanken und so macht sogar das ausgiebige Testen richtig Spaß&#8230; und ab dafür!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ausgebloggt.de/2010/04/26/symfony-fixturesproject/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>OpenSource-Web-Garde 2009</title>
		<link>http://www.ausgebloggt.de/2009/02/09/opensource-web-garde-2009/</link>
		<comments>http://www.ausgebloggt.de/2009/02/09/opensource-web-garde-2009/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 10:37:22 +0000</pubDate>
		<dc:creator>Andy Wesely</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[Typo3]]></category>
		<category><![CDATA[OpenSource]]></category>

		<guid isPermaLink="false">http://www.ausgebloggt.de/2009/02/09/opensource-web-garde-2009/</guid>
		<description><![CDATA[Das neue Jahr ist bereits im vollen Gange. Mir schwant bereits das es zeitlich auch in diesem Jahr nicht rosiger aussehen wird. Daher habe ich mich am Anfang des Jahres für die OpenSource-Webanwendungen entschieden, die den Grundstein eines jeden Projekts &#8230; <a href="http://www.ausgebloggt.de/2009/02/09/opensource-web-garde-2009/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Das neue Jahr ist bereits im vollen Gange. Mir schwant bereits das es  zeitlich auch in diesem Jahr nicht rosiger aussehen wird. Daher habe  ich mich am Anfang des Jahres für die OpenSource-Webanwendungen  entschieden, die den Grundstein eines jeden Projekts bilden sollen. Auf  diesem Weg hoffe ich Einlerneskapaden auf ein sinnvolles Maß beschränken  zu können. Das Ergebnis meiner Entscheidung möchte ich hier vorstellen.<span id="more-51"></span><span id="more-389"></span></p>
<p><strong><a href="http://www.symfony-project.org/" onclick="javascript:urchinTracker('/outbound/www.symfony-project.org/');">Symfony</a></strong>  &#8211; Ok, schon länger <a href="http://www.ausgebloggt.de/2007/10/02/symfony-beginn-einer-liebesgeschichte/" onclick="javascript:urchinTracker('/outbound/www.ausgebloggt.de/2007/10/02/symfony-beginn-einer-liebesgeschichte/');">mein  absoluter Liebling</a>. Im letzten Jahr neigte ich dazu alles auf Basis  von Symfony umzusetzen. Aber, auch wenn Symfony ein <a href="http://www.symfony-project.org/doc/1_2/" onclick="javascript:urchinTracker('/outbound/www.symfony-project.org/doc/1_2/');">berauschend  gut dokumentiertes Framework</a> ist. Es bereits für eine Menge  Aufgaben <a href="http://www.symfony-project.org/plugins/" onclick="javascript:urchinTracker('/outbound/www.symfony-project.org/plugins/');">Plugins</a>  gibt und auch eigene Erweiterungen schnell programmiert sind: Eine voll  ausgestattete Shopanwendung oder auch “nur” ein CMS einzurichten artet  zeitlich schnell aus. Bringt einem zuweilen auch um den Verstand. Daher  werde ich mich am Riemen reißen. Symfony wird dieses Jahr ausschließlich  für Entwicklungen mit besonderer Datenbankstruktur und funktionalen  Ansprüchen zum Einsatz kommen. Und ich werde diese Projekte genießen.</p>
<p><strong><a href="http://typo3.org/" onclick="javascript:urchinTracker('/outbound/typo3.org/');">Typo3</a></strong> &#8211;  Meine Beziehung zum CMS Typo3 ist eher durchwachsen. Es ist  ressourcenhunrig, nicht gerade einfach zu konfigurieren und das Backend  gewinnt für meinen Geschmack nicht unbedingt einen Schönheitspreis.  Aber, es gibt einen entscheidenden Vorteil: Wenn es um eine beliebige  Anforderung an ein CMS geht, konnte ich bisher getrost sagen “Typo3 kann  das”. Dieses Ungetüm ist einfach dermaßen flexibel und, vor allem in  Deutschland, weit verbreitet, das es einem einiges an Kopfschmerzen  erspart und Freizeit schafft, wenn man sich dann mal eingearbeitet hat.  Daher wird im Bereich Content-Management Typo3 mein CMS für das Jahr  2009.</p>
<p><strong><a href="http://www.magentocommerce.com/" onclick="javascript:urchinTracker('/outbound/www.magentocommerce.com/');">Magento</a></strong>  &#8211; Der gesamte Bereich Webshop war die letzten Jahre für mich der  Stressfaktor schlechthin. Mittlerweile sehe ich auf 2 Eigenentwicklungen  und eine Umsetzung auf Basis der Typo3-Erweiterung <a href="http://ttproducts.de/" onclick="javascript:urchinTracker('/outbound/ttproducts.de/');">tt_products</a>  zurück. Zufrieden haben mich die Ergebnisse aber nicht gemacht. Durch <a href="http://t3n.yeebase.com/magazin" onclick="javascript:urchinTracker('/outbound/t3n.yeebase.com/magazin');">mein  Lieblingszeitschrift T3N</a> wurde ich dann auf Magento aufmerksam. Zum  ersten Finale Release gab es einen großen <a href="http://milkstyle.de/blog/2008/11/28/hype-um-magento-verflogen/" onclick="javascript:urchinTracker('/outbound/milkstyle.de/blog/2008/11/28/hype-um-magento-verflogen/');">Hype  um Magento</a>.</p>
<p>Tatsache ist: Magento ist ein genialer Webshop. Basierend auf dem  Zend Framework besitzt es einen nahezu perfekten Unterbau und es macht  einem richtig stolz das Backend einem Kunden zu zeigen. Aber, Magento  macht auch sehr sehr viel Arbeit. Alleine die deutsche Mehrwertsteuer  einzurichten war anfangs ein Kampf. Einfach mal einen Webshop aufsetzen  ist also auch bei magenot nicht der Fall. Dafür wird man am Ende aber  für seine Mühen belohnt und so bleibt Magento das Shopsystem meiner  Wahl.</p>
<p>Klar, Vorsätze sind dafür da gebrochen zu werden. Für den Moment  bilde ich mir einfach ein dieser Artikel hätte etwas verbindliches. Wenn  mitte des Jahres dann hier Artikel über das <a href="http://framework.zend.com/" onclick="javascript:urchinTracker('/outbound/framework.zend.com/');">Zend  Framework</a>, <a href="http://www.drupal.de/" onclick="javascript:urchinTracker('/outbound/www.drupal.de/');">Drupal</a>  und <a href="http://www.xt-commerce.com/" onclick="javascript:urchinTracker('/outbound/www.xt-commerce.com/');">xt:Commerce</a>  stehen, kam es zu einem Putsch durch die zweite Garde.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ausgebloggt.de/2009/02/09/opensource-web-garde-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Symfony – jQuery Prototype clash</title>
		<link>http://www.ausgebloggt.de/2008/12/22/symfony-jquery-prototype-clash/</link>
		<comments>http://www.ausgebloggt.de/2008/12/22/symfony-jquery-prototype-clash/#comments</comments>
		<pubDate>Mon, 22 Dec 2008 10:44:42 +0000</pubDate>
		<dc:creator>Andy Wesely</dc:creator>
				<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://www.ausgebloggt.de/2008/12/22/symfony-jquery-prototype-clash/</guid>
		<description><![CDATA[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 &#8230; <a href="http://www.ausgebloggt.de/2008/12/22/symfony-jquery-prototype-clash/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>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.<span id="more-54"></span><span id="more-484"></span></p>
<p>Beim Einbinden meines neuen Moduls in ein recht komplexes Formular  schnellen die JavaScript-Fehler in <a href="http://www.fuenfpunktnull.de/index.php/2008/09/3-firefox-erweiterungen-fur-web-entwickler/">Firebug</a>  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.</p>
<p>Der Zeitplan geriet ins wanken und meine Stimmung stark abzusacken.  Zum einen <a href="http://www.symfony-project.org/book/1_2/11-Ajax-Integration#Prototype" onclick="javascript:urchinTracker('/outbound/www.symfony-project.org/book/1_2/11-Ajax-Integration_Prototype');">basieren  die in Symfony integrierten JavaScript-Helper auf Prototype</a>, zum  anderen wird an diversen Stellen, etwa im <a href="http://www.symfony-project.org/plugins/sfFormExtraPlugin" onclick="javascript:urchinTracker('/outbound/www.symfony-project.org/plugins/sfFormExtraPlugin');">sfFormExtraPlugin</a>  oder im <a href="http://www.symfony-project.org/jobeet/1_2/Propel/en/18#Installing%20JQuery" onclick="javascript:urchinTracker('/outbound/www.symfony-project.org/jobeet/1_2/Propel/en/18_Installing_20JQuery');">Jobeet-Tutorial</a>,  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: <a href="http://www.prototypejs.org/" onclick="javascript:urchinTracker('/outbound/www.prototypejs.org/');">Prototype</a>  und <a href="http://jquery.com/" onclick="javascript:urchinTracker('/outbound/jquery.com/');">jQuery</a>  kommen sich gehörig in die Quere. Ich hatte in meinem Wahn aber einfach  das Beste von beiden übernommen.</p>
<p><a href="http://www.hisky.de/2008/11/30/jquery-konflikt-mit-lightbox-thickbox-dank-prototypejs/" onclick="javascript:urchinTracker('/outbound/www.hisky.de/2008/11/30/jquery-konflikt-mit-lightbox-thickbox-dank-prototypejs/');">Direkt  der erste Treffer meiner Suche</a> bestätigt meine Vermutung. Sowohl  jQuery, als auch Prototype nutzen das $-Zeichen als Funktionsnamen. <a href="http://docs.jquery.com/Using_jQuery_with_Other_Libraries" onclick="javascript:urchinTracker('/outbound/docs.jquery.com/Using_jQuery_with_Other_Libraries');">Lösungen  des Problems war schnell gefunden</a>, nach 21 Uhr Feierabend sah das  mir aber nicht mehr aus. Doch ich irrte mich, um 21 Uhr sollte ich auf  dem Heimweg sein.</p>
<p>Die schnelle Lösung verdanke ich dem <a href="http://www.symfony-project.org/plugins/sfJqueryReloadedPlugin" onclick="javascript:urchinTracker('/outbound/www.symfony-project.org/plugins/sfJqueryReloadedPlugin');">Plugin  sfJqueryReloaded</a>. Dieses liefert zum größten Teil jQuery-Pendante  für die von Symfony angebotenen Prototype-Helper. Aus meiner genutzten  Funktion <code>submit_to_remote wird dann einfach jq_</code><code>submit_to_remote  und im Handumdrehen war Prototype überflüssig.</code></p>
<p>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:</p>
<p><code>symfony plugin:install sfJqueryReloadedPlugin --release=1.2.2</code></p>
<p>Schön, und weiter geht es mit der Ajaxifizierung!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ausgebloggt.de/2008/12/22/symfony-jquery-prototype-clash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Symfony – Admin-Generator Lokalisierung</title>
		<link>http://www.ausgebloggt.de/2008/12/17/symfony-admin-generator-lokalisierung/</link>
		<comments>http://www.ausgebloggt.de/2008/12/17/symfony-admin-generator-lokalisierung/#comments</comments>
		<pubDate>Wed, 17 Dec 2008 14:14:53 +0000</pubDate>
		<dc:creator>Andy Wesely</dc:creator>
				<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://www.ausgebloggt.de/2008/12/17/symfony-admin-generator-lokalisierung/</guid>
		<description><![CDATA[Auch im Thema i18n hat sich mit Symfony 1.2 etwas geändert, so führt der alte Weg der Lokalisierung des Admin-Generators nicht mehr zum Ziel. Wenn man sich die Dokumentation der Generatoren und zur Lokalisierung genauer zu Gemüte führt, wird klar, &#8230; <a href="http://www.ausgebloggt.de/2008/12/17/symfony-admin-generator-lokalisierung/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Auch im Thema i18n hat sich mit Symfony 1.2 etwas geändert, so führt  der alte Weg der Lokalisierung des Admin-Generators nicht mehr zum Ziel.  Wenn man sich die Dokumentation der <a onclick="javascript:urchinTracker('/outbound/www.symfony-project.org/book/1_2/14-Generators?ref=/index.php/page/6/');" href="http://www.symfony-project.org/book/1_2/14-Generators">Generatoren</a> und zur <a onclick="javascript:urchinTracker('/outbound/www.symfony-project.org/book/1_2/13-I18n-and-L10n?ref=/index.php/page/6/');" href="http://www.symfony-project.org/book/1_2/13-I18n-and-L10n">Lokalisierung</a> genauer zu Gemüte führt, wird klar, was anders gemacht werden muss und  das dieser neue Ansatz auch durchaus seine Vorteile hat. Im Folgenden  geht es nicht um eine detaillierte Beschreibung der Lokalisierung  generell, sondern um den aus meiner Sicht besten Weg die Model-Felder  und Filter im Admin-Generator zu übersetzen.<span id="more-70"></span>Zur Lokalisierung des kompletten generierten Interfaces müssen an  mehren Stellen Änderungen vorgenommen werden.  In der generator.yml  Datei des generierten Moduls kann angegeben werden, welcher  Übersetzungskatalog genutzt werden soll:</p>
<pre>generator:
  class: sfPropelGenerator
  param:
    i18n_catalogue:        my_translation</pre>
<p>Diese Angabe führt dazu, dass symfony in  application/i18n/my_translation.xx.xml nach den Übersetzungen für die  generierten Dateien sucht. Bei xx handelt es sich dabei um den  Ländercode, also z.B. my_translation.de.xml. <a onclick="javascript:urchinTracker('/outbound/www.symfony-project.org/book/1_2/13-I18n-and-L10n_Using_20Dictionary_20Files?ref=/index.php/page/6/');" href="http://www.symfony-project.org/book/1_2/13-I18n-and-L10n#Using%20Dictionary%20Files">Der Aufbau dieser Dateien wird hier beschrieben</a>. Durch diese Änderungen kann jetzt der Titel der Listen und Formulare angepasst werden.</p>
<p>Übersetzungen der im Model definierten und vom Generator ausgegebene Felder greift in dieser Datei jedoch nicht. <a onclick="javascript:urchinTracker('/outbound/www.symfony-project.org/book/forms/1_2/en/08-Internationalisation-and-Localisation?ref=/index.php/page/6/');" href="http://www.symfony-project.org/book/forms/1_2/en/08-Internationalisation-and-Localisation">Hierzu muss der jeweiligen Form-Klasse erst mitgeteilt werden, auf welchen Katalog sie zurückgreifen soll</a>:</p>
<pre>$this-&gt;widgetSchema-&gt;getFormFormatter()
  -&gt;setTranslationCatalogue('my_translation');</pre>
<p>Damit können auch die Felder in der Datei angepasst werden, womit die  Tabellenübersicht und das Formular übersetzt werden können. Noch nicht  greifen tut die Übersetzung für die generierten Filter. Daher muss auch  der Katalog für die jeweilige Filter Klasse unter lib/filter angepasst  werden. Hierzu einfach die schon bekannte Zeile zur Konfiguration  nutzen:</p>
<pre>$this-&gt;widgetSchema-&gt;getFormFormatter()
  -&gt;setTranslationCatalogue('my_translation');</pre>
<p>Nach der Anpassung an diesen drei Stellen ist die Übersetzung des Moduls zentral in der Datei my_translation.de.xml möglich.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ausgebloggt.de/2008/12/17/symfony-admin-generator-lokalisierung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Symfony – admin_double_list Problem</title>
		<link>http://www.ausgebloggt.de/2008/12/09/symfony-admin_double_list-problem/</link>
		<comments>http://www.ausgebloggt.de/2008/12/09/symfony-admin_double_list-problem/#comments</comments>
		<pubDate>Tue, 09 Dec 2008 10:46:55 +0000</pubDate>
		<dc:creator>Andy Wesely</dc:creator>
				<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://www.ausgebloggt.de/2008/12/09/symfony-admin_double_list-problem/</guid>
		<description><![CDATA[In Symfony 1.0 war es ganz einfach. In der generator.yml des Moduls als type: admin_double_list angegeben und zwei Select-Felder zur Mehrfachauswahl machten einem das Leben leichter. Mit Symfony 1.2 funktioniert das nicht mehr. Der neue Weg ist aber ebenso einfach, &#8230; <a href="http://www.ausgebloggt.de/2008/12/09/symfony-admin_double_list-problem/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In Symfony 1.0 war es ganz einfach. In der <em>generator.yml</em> des  Moduls als <em>type: admin_double_list</em> angegeben und zwei  Select-Felder zur Mehrfachauswahl machten einem das Leben leichter. Mit  Symfony 1.2 funktioniert das nicht mehr. Der neue Weg ist aber ebenso  einfach, man muss es nur wissen. <a href="http://www.symfony-project.org/book/forms/1_2/en/" onclick="javascript:urchinTracker('/outbound/www.symfony-project.org/book/forms/1_2/en/');">Die  Lösung ist wieder im neuen Form-Framework zu finden.<span id="more-55"></span></a></p>
<p>Wie das Feld ausgegeben werden soll, wird nicht mehr über die  Generator-Konfiguration angegeben, sondern das Widget für das Feld in  der Form-Klasse des Objekts muss angepasst werden:</p>
<p><code>  $this-&gt;widgetSchema['genre_list']-&gt;setOption(’renderer_class’,  ’sfWidgetFormSelectDoubleList’);</code></p>
<p>Schon hat man das gewohnte Ergebnis. Tja, eigentlich logisch…</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ausgebloggt.de/2008/12/09/symfony-admin_double_list-problem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Symfony – Datum-Bereich anpassen</title>
		<link>http://www.ausgebloggt.de/2008/12/06/symfony-datum-bereich-anpassen/</link>
		<comments>http://www.ausgebloggt.de/2008/12/06/symfony-datum-bereich-anpassen/#comments</comments>
		<pubDate>Sat, 06 Dec 2008 10:50:30 +0000</pubDate>
		<dc:creator>Andy Wesely</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://www.ausgebloggt.de/2008/12/06/symfony-datum-bereich-anpassen/</guid>
		<description><![CDATA[Mit der Weihnachtszeit steht bei mir die Entwicklung einer größeren Datenbank- Anwendung inklusive Webseite auf dem Plan. Zur Entwicklung dient einmal mehr Symfony als Grundlage. Symfony 1.2 um genau zu sein. Neben der Begeisterung ist damit allerdings auch das ein &#8230; <a href="http://www.ausgebloggt.de/2008/12/06/symfony-datum-bereich-anpassen/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Mit der Weihnachtszeit steht bei mir die Entwicklung einer größeren  Datenbank- Anwendung inklusive Webseite auf dem Plan. Zur Entwicklung  dient einmal mehr Symfony als Grundlage. Symfony 1.2 um genau zu sein.  Neben der Begeisterung ist damit allerdings auch das ein oder andere  Problem verbunden. Was in Symfony 1.0 so funktionierte, funktioniert in  Version 1.2 so.<span id="more-57"></span></p>
<p>Zu all diesen kleinen Problemchen werde ich hier posten, so das sie  anderen erspart bleiben und mir nicht in Vergessenheit geraten. Los  geht’s mit dem Anpassen der Datum-Anzeige im Admin-Genearator.<span id="more-387"></span></p>
<p>Die Anwendung an der ich arbeite basiert auf schon bestehenden Daten.  Dummer Weise blieben beim Import der älteren Datensätzen die  Jahresangaben scheinbar auf der Strecke. Schnell war klar, dass es nicht  am Import-Script, sondern an den vom Admin-Generator für <em>datetime</em>  bereit gestellten Datum-Felder lag. Diese erlauben nur eine Anzeige von  5 Jahren in der Vergangenheit und 5 Jahren in der Zukunft.</p>
<p>Nach etwas Suchen, findet sich in der Klasse <em>sfWidgetFormDate</em>  dann auch die Zeile:</p>
<p><code>$years = range(date('Y') - 5, date('Y') + 5);</code></p>
<p>Alles klar, das konnte ich so nicht gebrauchen. <a href="http://symfonynerds.com/blog/?p=121" onclick="javascript:urchinTracker('/outbound/symfonynerds.com/blog/?p=121');">Schnell  war im Netz eine passende Lösung gefunden</a>. Um die Auswahl und  Anzeige von Jahren auch weiter in der Vergangenheit und der Zukunft zu  erlauben, muss die Form-Klasse des jeweiligen Objektes angepasst werden.  In meinem Fall z.B.:</p>
<p><code>$years = range(1950, date('Y')+5);<br />
$years_list = array_combine($years, $years);</code></p>
<p>$this-&gt;widgetSchema['ba_date']-&gt;setOption(’date’, array(’years’  =&gt; $years_list));</p>
<p>So funktioniert es dann auch mit Daten in den Fünfzigern. Zugegeben,  wenig intuitiv, aber <a href="http://trac.symfony-project.org/ticket/4163" onclick="javascript:urchinTracker('/outbound/trac.symfony-project.org/ticket/4163');">es  besteht schon ein Ticket welches in Zukunft für eine bessere Lösung  sorgen soll…<br />
</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ausgebloggt.de/2008/12/06/symfony-datum-bereich-anpassen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Symfony – Eine Volltextsuche muss her!</title>
		<link>http://www.ausgebloggt.de/2007/10/12/symfony-eine-volltextsuche-muss-her/</link>
		<comments>http://www.ausgebloggt.de/2007/10/12/symfony-eine-volltextsuche-muss-her/#comments</comments>
		<pubDate>Fri, 12 Oct 2007 19:08:40 +0000</pubDate>
		<dc:creator>Andy Wesely</dc:creator>
				<category><![CDATA[Symfony]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.ausgebloggt.de/2007/10/12/symfony-eine-volltextsuche-muss-her/</guid>
		<description><![CDATA[Nur wie? Eine Möglichkeit wäre es, dass Ganze, wie gewohnt, über die Datenbank laufen zu lassen. Voraussetzung dafür ist allerdings, dass die Datenbank Volltexindexierung unterstützt, wie etwa MySQL in MyISAM Tabellen. Ein solche Abhängigkeit würde die Symfony Datenbankabstraktion allerdings mit &#8230; <a href="http://www.ausgebloggt.de/2007/10/12/symfony-eine-volltextsuche-muss-her/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.ausgebloggt.de/wp-content/uploads/2007/10/symfony-150x122.gif" alt="Symfony Logo" style="border: 0pt none ; margin: 10px" align="right" />Nur wie? Eine Möglichkeit wäre es, dass Ganze, wie gewohnt, über die Datenbank laufen zu lassen. Voraussetzung dafür ist allerdings, dass die Datenbank Volltexindexierung unterstützt, wie etwa MySQL in MyISAM Tabellen. Ein solche Abhängigkeit würde die Symfony Datenbankabstraktion allerdings mit Füßen treten, also machte ich mich auf die Suche und wurde fündig.</p>
<p><span id="more-25"></span></p>
<h3>Eine Entscheidung</h3>
<p>Symfony selbst bietet an diversen Stellen Infos, von <a href="http://www.symfony-project.com/askeet/1_0/21" title="Askeet Tutorial: Day 21 - Search engine">der selbst geschriebenen PHP basierten Suchmaschine</a>, bis zum <a href="http://trac.symfony-project.com/wiki/sfLucenePlugin" title="Symfony Plugin sfLucenePlugin">sfLucenePlugin</a>. Nun heißt es, im mittlerweile in die Jahre gekommen Askeet Tutorial, Zend würde für sein Framework noch etwas länger brauchen. Seit der Veröffentlichung des Zend Frameworks in der Stable Version 1.0, kann davon natürlich keine Rede mehr sein. Da ich das Zend Framework sehr schätze &#8211; Warum? Verdammt starkes Argument, aber: Es kommt von Zend! &#8211; viel mir die Entscheidung leicht.</p>
<p>Das <a href="http://trac.symfony-project.com/wiki/sfLucenePlugin" title="Symfony Plugin sfLucenePlugin">sfLucenePlugin</a> arbeitet mit der <a href="http://framework.zend.com/manual/en/zend.search.lucene.html" title="Zend Search Lucene Reference">Zend Search Lucene Klasse aus dem Zend Framework</a> und stellte damit genug Anreiz für mich da, die Sache mal auszuprobieren. Eine Alternative zum Plugin, in dessen Beschreibung ausdrücklich auf das <img src="http://www.ausgebloggt.de/wp-content/uploads/2007/10/lucene_logo-150x46.gif" alt="Lucene Logo" style="border: 0pt none ; margin: 10px" align="left" />Alpha Stadium hingewiesen wird, ist <a href="http://blog.t8d.de/2007/07/10/zend_search_lucene-und-symfony-teil-1/" title="Manuelle Integration der Lucene Search Engine">die manuelle Integration der Klasse aus dem Zend Framework. Den Weg dazu beschreibt Johannes Schmidt hier im t8d-Blog</a> oder <a href="http://spindrop.us/2006/08/25/using-zend-search-lucene-in-a-symfony-app/" title="Zend Lucene integrieren">auch hier Dave Dash auf Englisch</a>. Wohl der zuverlässigere Weg, mit dem ich mich auch noch beschäftigen werde, aber das Plugin sollte erst einmal seine Chance bekommen.<a href="http://blog.t8d.de/2007/07/10/zend_search_lucene-und-symfony-teil-1/" title="Manuelle Integration der Lucene Search Engine"><br />
</a></p>
<h3>Woher kommt dieses &#8220;Lucene&#8221; eigentlich?</h3>
<p>Bei der Lucene Search Komponente des Zend Frameworks handelt es sich um eine in PHP5<img src="http://www.ausgebloggt.de/wp-content/uploads/2007/10/apache_logo-150x42.png" alt="Apache Logo" style="border: 0pt none ; margin: 10px" align="right" /> implementierte Version der ursprünglich von Apache in Java programmierten Volltextsuchmaschine Lucene. <a href="http://lucene.apache.org/java/docs/" title=" Apache Lucene - Overview">Mehr Informationen zu diesem Ursprung bei Apache finden sich hier</a>. Also, ziemlich starke Namen, die da auftauchen und nun endlich ran an den Speck!</p>
<h3>Plugin Installation</h3>
<p>Die Installation gestaltete sich gewohnt einfach.</p>
<ol>
<li> Installieren des Plugins:
<pre>symfony plugin-install http://plugins.symfony-project.com/sfLucenePlugin</pre>
</li>
<li>Konfigurationdateien anlegen:
<pre class="wiki">symfony lucene-init myapp</pre>
</li>
<li>Symfony Cache leeren:
<pre class="wiki">symfony cc</pre>
</li>
</ol>
<h3>Die grundlegende Konfiguration</h3>
<p>Um eine erstes Ergebnis zu erzielen, habe ich mich einfach an die Konfigurationvorschläge auf der Plugin Seite gehalten.  Das gesamte Plugin wird über die Datei <em>search.yml</em> im <em>config</em> Ordner des Projekts (z.B. <em>projekt/config/search.yml</em>) konfiguriert. Also, Datei geöffnet und folgendes rein geschrieben:</p>
<pre>index:
  name: MyIndex
  encoding: UTF-8
  short_words: 2
  cultures: [en]</pre>
<p>Der <em>name</em> des Indexes wird vom Plugin benötigt, aber scheint sonst keine sonderliche Bedeutung zu haben.</p>
<p>Unter <em>encoding </em>ist prinzipiell auch eine andere Kodierung möglich, in der Doku wird aber ausdrücklich darauf hingewiesen, dass UTF8 generell die beste Wahl darstellt.</p>
<p>Über <em>short_words </em>ist dem Plugin mitzuteilen, bei welcher Zeichenlänge es Wörter gar nicht erst in den Index aufnehmen soll. In diesem Fall also 2 Zeichen.</p>
<p>Ein großer Vorteil des Plugins: Es unterstützt die Internationalisierung bereits. So sind über den Parameter <em>cultures </em>die Sprachen anzugeben, für die ein Index erstellt werden soll. Zumindest eine Sprache ist hier Pflicht, sonst kann der Index nicht erstellt werden.</p>
<p><a href="http://trac.symfony-project.com/wiki/sfLucenePlugin" title="Symfony Plugin sfLucenePlugin">Infos zu weiteren Konfigurationmöglichkeiten finden sich auf der Projekt Seite.</a></p>
<h3>Die Applikation konfigurieren</h3>
<p>Nun geht es darum, dem Plugin zu sagen, welche Daten es in den Index aufnehmen soll. Ich entschied mich für die ORM-Layer Variante und habe dazu die <em>search.yml</em> Datei von eben (also im Beispiel <em>projekt/config/search.yml</em>) um den folgenden Bereich erweitert:</p>
<pre>models:
  Post:
    fields:
      id: unindexed
      title:
        boost: 1.5
        type: text
      excerpt: text
      body: text
    description: body
    title: title</pre>
<p>Im Bereich <em>fields</em> werden die einzelnen Felder angegeben, welche in den Index übernommen werden sollen. <a href="http://framework.zend.com/manual/en/zend.search.lucene.html#zend.search.lucene.index-creation.understanding-field-types" title="Zned Doku zu den verwendeten Field Types">Genauere Infos zu den verwendeten Typen, finden sich hier in der Zend Dokumentation.</a></p>
<p>Zusätzlich ist es noch möglich, bestimmten Feldern eine höhere Gewichtung im Suchergebnis zu verschaffen. Im Beispiel geschehen beim Feld <em>title,</em> mit der Angabe <em>boost: 1.5 </em></p>
<p>Eigentlich ist die Konfiguration für das Modul damit abgeschlossen, da das Plugin eigentlich automatisch heraus finden soll, welches Feld als Titel und welches als Beschreibung in der Trefferliste angezeigt werden soll. Bei mir ging das nicht so wirklich  und so habe ich mit den Angaben <em>description: body</em> und <em>title: title</em> angeben können, welche Felder verwendet werden sollen.</p>
<h3>Routing der Applikation</h3>
<p>Jetzt muss noch definiert werden, worauf in den späteren Ergebnislisten verlinkt werden soll. Hier kommt die <em>search.yml</em> Datei im Config Ordner der Applikation zum Einsatz. Der Eintrag:</p>
<pre>models:
  Post:
    route: post/show?id=%id%</pre>
<p>gibt den Pfad an, der bei einem Ergebnis für Post genutzt werden soll. <em>%id% </em>wird dabei automatisch durch die ID des Eintrages ersetzt. Voraussetzung dazu ist allerdings, dass sich die ID auch im Index befindet.</p>
<h3>Einrichten Behavior</h3>
<p>Nun muss das Model selbst noch so erweitert werden, dass bei Änderungen der Daten automatisch der Index aktualisiert wird. Zurzeit Arbeitet das Plugin leider nur mit Propel zusammen, Doctrine soll folgen. Die Anpassung der Model Klasse, in diesem Beispiel <em>lib/model/Post.php,</em> erfolgt über folgende Zeile, am Ende der Datei:</p>
<pre>sfLucenePropelBehavior::getInitializer()-&gt;setupModel('Post');</pre>
<p>Durch diesen Aufruf werden Behavior für Pre Save, Post Save, Pre Delete und Post Delete initialisiert.  <a href="http://www.symfony-project.com/book/1_0/08-Inside-the-Model-Layer#Using%20Model%20Behaviors" title="Symfony Doku zum Thema Model Behaiors">Mehr zum Thema Model Behavior findet sich hier in der Dokumentation, im Abschnitt &#8220;Using Model Behaviors&#8221;</a>.</p>
<p>Ein kleines, aber überaus wichtiges Detail: Propel unterstützt in Standardkonfiguration keine Behavior. Daher muss in der Datei <em>project/config/propel.ini </em>der Wert von <em>propel.builder.addBehaviors</em> von <em>false</em> auf <em>true</em> gesetzt werden. Nach dem ändern dieses Wertes muss das Model mit einem <em>symfony propel-build-model</em> neu gebaut werden, sonst ist die Frustration groß&#8230; ich weiß von was ich spreche ;)</p>
<h3>So, endlich: Die Volltextsuche!</h3>
<p>Alles ist so weit konfiguriert und es kann an das Erstellen des Indexes gehen:</p>
<pre class="wiki">symfony lucene-rebuild myapp</pre>
<p>Initialisiert den Index, wobei <em>myapp </em>mit dem Namen der Applikation ersetzt werden muss, für die der Index erstellt werden soll<em>.</em></p>
<p><img src="http://www.ausgebloggt.de/wp-content/uploads/2007/10/lucene_search_from.png" alt="Lucene Suchmaske" style="border: 0pt none ; margin: 10px" align="right" height="117" width="358" />Nun fehlt nur noch die Oberfläche, um das Ganze auch zu testen. Hierzu bietet das Plugin bereits ein Standardmodul. Um diese zur Verfügung zu stellen, muss die <em>settings.yml</em>, im Config Ordner der Applikation, um folgende Zeilen erweitert werden, damit das mitgelieferte Modul des Plugins verfügbar ist:</p>
<pre>all:
  .settings:
    enabled_modules: [default, sfLucene]</pre>
<p>Ein Aufruf der Applikation, mit dem Modul sfLucene, zaubert jetzt auch die lang ersehnte Suchmaske auf den Bildschirm.</p>
<h3>Keine Wildcards?!</h3>
<p>Ok, eine Suche nach <em>Packungen</em> funktioniert einwandfrei, die Suche nach Packung führt jedoch zu keinem Ergebnis. Hm, dumm, aber, siehe da, nach der <a href="http://framework.zend.com/manual/en/zend.search.lucene.query-language.html#zend.search.lucene.query-language.wildcard" title="Zend Dokumentation Lucene Wildcards">Zend Doku versteht die Suche durchaus Wildcards</a>. Also nach <em>Packung*</em> gesucht und nach etwas Testen erst einmal dumm aus der Wäsche geguckt: Kein Ergebnis. Wem soll ich denn bitte diese Suche andrehen?</p>
<p><img src="http://www.ausgebloggt.de/wp-content/uploads/2007/10/wildcard.png" alt="Wildcard" style="border: 0pt none ; margin: 10px" align="left" />Die Lösung des Problems war dann ein wenig Tricky. <a href="http://groups.google.fr/group/symfony-users/browse_thread/thread/2a3e4d68d9007f8d" title="Newsgroup zu fehlenden Wildcards in sfLucenePlugin">Ich stieß auf eine Diskussion, in der es um die fehlende Wildcard Unterstützung geht</a>, samt der Lösung des Problems!</p>
<p>Diese sieht wie folgt aus: Auch wenn Zend die Wildcards bereits in die Dokumentation übernommen hat, unterstützt die Suche diese in der Stable Version bisher noch nicht, im Nightly Build aber! Also, <a href="http://framework.zend.com/download/snapshot/" title="Zend Framework Download">aktuelles Nightly Build runter geladen,</a> die Search Komponente aus <em>library/Zend/ </em>kopiert und in den Ordner <em>plugins/sfLucenePlugin/lib/vendor/Zend/ </em>über die bestehenden Dateien kopiert. Und Zack, nach einem <em>symfony lucene-rebuild</em>: Die Suche nach <em>Packung*</em> führte zu dem gewünschten Ergebnis und ich konnte wieder aufatmen :)</p>
<h3>Was soll nun werden, hm?</h3>
<p>Ich könnte nun noch weiter ins Detail gehen, würde dabei aber letztlich nur noch das wiederholen, was eh schon auf der Projektseite beschrieben wird. Es gibt noch diverse Konfiguratonsmöglichkeiten wie Resulthighlighting, Stopwords, eigene spezielle Indexierung und so weiter, aber erst einmal habe ich meine Suche und will wissen wie sie tickt, aber ich sehe dem Ganzen optimistisch entgegen. Erster Eindruck: Ein starkes Plugin!</p>
<p>P.S.: Ich will in dem Blog eigentlich keine News bloggen, die bereits zu Hauf gebloggt wurden, aber wo ich schon mal dabei bin: Heute ist Symfony  1.0.8 erschienen! <a href="http://www.symfony-project.com/blog/2007/10/12/symfony-1-0-8-is-out" title="Symfony 1.0.8 erschienen">Die Änderungen gibt es hier</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ausgebloggt.de/2007/10/12/symfony-eine-volltextsuche-muss-her/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Symfony – Beginn einer Liebesgeschichte</title>
		<link>http://www.ausgebloggt.de/2007/10/02/symfony-beginn-einer-liebesgeschichte/</link>
		<comments>http://www.ausgebloggt.de/2007/10/02/symfony-beginn-einer-liebesgeschichte/#comments</comments>
		<pubDate>Tue, 02 Oct 2007 19:24:05 +0000</pubDate>
		<dc:creator>Andy Wesely</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://www.ausgebloggt.de/2007/10/02/symfony-beginn-einer-liebesgeschichte/</guid>
		<description><![CDATA[Eine wunderbare Nachricht erreicht mich da heute. Seit einiger Zeit spreche ich vom PHP-Framework Symfony nur noch wie verliebt und ernte dementsprechende Blicke meiner Kollegen &#8211; man kann es ihnen nicht übel nehmen. &#8220;Jetzt macht er vollständig einen auf Programmierer, &#8230; <a href="http://www.ausgebloggt.de/2007/10/02/symfony-beginn-einer-liebesgeschichte/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.ausgebloggt.de/wp-content/uploads/2007/10/symfony-150x122.gif" title="Symfony Logo" alt="Symfony Logo" style="border: medium none ; margin: 10px" align="right" />Eine wunderbare Nachricht erreicht mich da heute. Seit einiger Zeit spreche ich vom  <a href="http://www.symfony-project.com/" title="Symfony Webseite">PHP-Framework Symfony</a> nur noch wie verliebt und ernte dementsprechende Blicke meiner Kollegen &#8211; man kann es ihnen nicht übel nehmen. &#8220;Jetzt macht er vollständig einen auf Programmierer, steht auf irgend so ein Framework, anstatt auf Frauen.&#8221; Dabei kommt es nur auf den Blickwinkel an, um zu sehen: Durch dieses Framework habe ich erst wieder Zeit für Beziehungen!</p>
<p><span id="more-15"></span></p>
<h3>Wie konnte es nur so weit kommen?</h3>
<p>Ok, ich merke, ich muss weiter ausholen: In den letzten Jahren habe ich sehr viel mit <a href="http://www.joomla.org/" title="Joomla Websiete">Joomla</a> bzw. Mambo gearbeitet, eigene Komponenten geschrieben und auch größere Projekte auf Basis von Joomla <img src="http://www.ausgebloggt.de/wp-content/uploads/2007/10/joomla_logo.png" title="Joomla Logo" alt="Joomla Logo" style="border: 0pt none ; margin: 10px" align="left" />umgesetzt. Seit Ende letzten Jahres warte ich nun  auf Joomla 1.5. Habe mir die Beta Versionen schon einige Male angesehen, aber so richtige Hochstimmung wollte da nicht aufkommen, davon abgesehen, dass die neue Version bis heute nicht als stabil zur Verfügung steht.  Anstatt dessen letzte Woche die, wie ich finde, Hiobsbotschaft: <a href="http://www.joomla.org/component/option,com_jd-wp/Itemid,105/p,418/" title="Joomla Developer Blog">Das &#8220;Quality &#038; Testing&#8221;- sowie das Design &#038; Accessibility&#8221;-Team wurde abgeschafft</a>. Herrje, was soll das denn jetzt? Nun, darum soll es hier nicht gehen. <a href="http://www.nitsche.org/news/joomla/joomla-projektleitung-feuert-zwei-workgroups.html" title=" Joomla-Projektleitung feuert zwei Workgroups">Einen sehr guten Beitrag dazu gibt es aber unter www.nitsche.org. </a></p>
<p>Um bei der Beziehung zu bleiben: Joomla und ich haben uns auseinandergelebt, sind  aber noch gute Freunde, man kennt das ja. Ich will Joomla nicht schlecht machen, ich mag es, aber vor allem wenn es um Anwendungsentwicklung ging, gab es ganz klare Grenzen, an denen alles eher in Frustration umschlug. So machte ich mich also auf die Suche, nach einem wirklichen PHP Framework. Recht schnell hatte ich die wohl üblichen Verdächtigen in der engeren Auswahl:</p>
<ul>
<li> <a href="http://framework.zend.com/" class="external text" title="http://framework.zend.com" rel="nofollow">ZendFramework</a></li>
<li> <a href="http://www.cakephp.org/" class="external text" title="http://www.cakephp.org" rel="nofollow">CakePHP</a></li>
<li><a href="http://www.pradosoft.com/" title="PradoFramework">PradoFramework</a></li>
<li><a href="http://ez.no/ezcomponents" title="eZ Components">eZ Components</a></li>
<li><a href="http://www.symfony-project.com/" class="external text" title="http://www.symfony-project.com" rel="nofollow">Symfony Framework</a></li>
</ul>
<p>Eigentlich hätte ich gerne die erste Stable Version des Zend Frameworks genutzt. Das<img src="http://www.ausgebloggt.de/wp-content/uploads/2007/10/zend_framework_logo-150x67.gif" title="Zend Framework Logo" alt="Zend Framework Logo" style="border: 0pt none ; margin: 10px" align="right" /> wäre eine reine Sache der Vernunft gewesen. Das Zend Framework wird früher oder später zum quasi Standard PHP Frameworks, da habe ich eigentlich keine Zweifel. Aber, warum Vernunft, wenn es um Liebe geht?! Daher gibt es hier keinen Vergleich der Frameworks, dafür habe ich, mit gerade mal 2 Tagen, bei weitem nicht intensiv genug getestet. Einen <a href="http://blog.t8d.de/2007/07/02/php-framework-vergleich-cakephp-vs-symfony/" title="Vergleich cakePHP und Symfony">interessanten Erfahrungsbericht und Vergleich zwischen cakePHP und Symfony findet man hier</a> und einmal Goolge angeworfen, hagelt es nur so Vergleichstests.</p>
<p>Nein, es geht darum, warum ich mich so schnurstracks in Symfony verliebt habe. Ohne lange Kennenlernphase, Händchenhalten und alles was dazu gehört&#8230;</p>
<h3>Nun, Symfony ist verdammt sexy!</h3>
<p>Ich bin krank? Hm, ich versuche zu erklären, wie ein OpenSource Projekt sexy sein kann:</p>
<ol>
<li>Die <a href="http://www.symfony-project.com/doc/1_0/" title="Symfony Dokumentation">Dokumentation</a> läßt kaum Wünsche offen und wird aktiv von der Community weiterentwickelt. Grundlage ist ein komplettes Buch, welches direkt aus der Feder der Entwickler stammt, was der Verständlichkeit allerdings in keiner Weise schadet, also nicht in unverständliche Fachsimpelei ausartet. Am Beispiel von Symfony werden unzählige  etablierte Techniken zur professionellen PHP-Entwicklung leicht verständlich angesprochen, so das selbst Programmierer, die bereits eine andere Liebe gefunden haben, daran ihren Spaß haben können.</li>
<li><img src="http://www.ausgebloggt.de/wp-content/uploads/2007/10/askeet_logo-150x57.gif" title="Askeet Logo" alt="Askeet Logo" style="border: 0pt none ; margin: 10px" align="right" />Die Doku ist recht theoretisch gehalten, im Praktischen setzt dafür dann aber <a href="http://www.symfony-project.com/askeet/1_0/" title="Symfony Askeet Tutorial">das Askeet Tutorial</a> der Dokumentation die Krone auf. In 24 Tagen (Es handelt sich dabei ursprünglich um einen Weihnachtskalender) wird die komplette Entwicklung einer Anwendung in Symfony geschildert, so das man danach wirklich heiß ist, selbst zu entwickeln. <a href="http://www.askeet.com/" title="Askeet live im Netz">Live ist die Anwendung hier im Einsatz</a>.</li>
<li>Mit Hilfe von <a href="http://de.wikipedia.org/wiki/Scaffolding" title="Wikipedia über Scaffolding">Scaffolding</a> wird die Anwendungsentwicklung enorm beschleunigt. Keine wiederkehrenden, nervenden Aufgaben: Wenige Zeilen auf der Komandozeile und das Grundgerüst steht. Im einstündigen <a href="http://www.symfony-project.com/tutorial/1_0/my-first-project" title="Symfony Tutorial: My first symfony project">Tutorial &#8220;My first symfony project&#8221;</a> ist sehr gut nachzuvollziehen, wie viel Arbeit  dadurch von Symfony übernommen wird. Einige kennen es sicherlich durch <a href="http://www.rubyonrails.org/" title="Webseite Ruby on Rails">Ruby on Rails</a>, aber hey, ich stehe nun mal auf PHP und da bin ich froh, dass da so etwas nettes nach meiner sexuellen Ausricht &#8230;ok, lassen wir das.</li>
<li>Der Admin Generator ist dann wirklich ein wahrer Segen. Anhand von Konfigurationsdateien und der Datenbankstruktur, generiert Symfony das komplette Backend, ohne das dazu auch nur eine Zeile PHP nötig wäre. Das Zend Framework bietet bisher noch nichts vergleichbares. <a href="http://www.symfony-project.com/screencast/admin-generator" title="Symfony Admin Generator Video">In Aktion ist der Admin Generator in diesem Video zu bewundern</a> &#8211; zwischenzeitlich hatte ich Probleme den Mund wieder zu schließen&#8230;</li>
<li>Soweit ich es bisher überblicken kann, handelt es sich um eine wirklich solide PHP5 Codebasis, ohne ständige Ausnahmen. PHP5 ist damit allerdings auch Voraussetzung. Zudem machen die Entwickler einem Hoffnung, in dem sie das ganze als &#8220;Enterprise Version&#8221; bezeichnen, die Codebasis also noch lange Zeit gepflegt werden soll.</li>
<li>Es ist bereits alles an Bord zur Internationalisierung. Eine Never Ending Story bei der Joomla Entwicklung.</li>
<li>Viele eingebaute Helfer, die einem das Leben einfacher machen. So ist z.B.<a href="http://www.prototypejs.org/" title="Websiete Prototype"> Prototype</a> und <a href="http://script.aculo.us/" title="script.aculo.us Webseite">script.aculo.us </a>bereits integriert. Ein sehr schönes Anwendungsbeispiel dazu ist <a href="http://www.symfony-project.com/screencast/cart" title="Symfony Ajax Video">dieses Video, in dem ein Ajax Warenkorb, mit einigen netten Effekten, programmiert wird</a>.</li>
<li>Zur Philosophie gehört es, möglichst viel in Konfigurationsdateien auszulagern. Was auf den ersten Blick nach ziemlichem Overhead aussieht &#8211;  es gibt bis in die letzte Ebene immer speziellere Konfigurationsdateien &#8211; stellt sich als ideale Grundlage für leicht erweiterbare und konfigurierbare Anwendungen da.</li>
<li>Das Framework ist durch zahlreiche Plugins erweiterbar. Ein Beispiel, welches mir meine Entscheidungsfindung letztlich enorm vereinfacht hat: <a href="http://trac.symfony-project.com/wiki/sfZendPlugin" title="Symfony Zend Framework Plugin">Das Zend Framework ist via Plugin zu integrieren</a>!</li>
<li>Es gibt noch einiges mehr zu entdecken, aber an dieser Stelle habe ich es satt, mich für meine Liebe zu rechtfertigen, und fordere zu eigenen Entdeckungsreisen auf!</li>
</ol>
<h3>Was für eine Nachricht denn nun eigentlich?</h3>
<p><img src="http://www.ausgebloggt.de/wp-content/uploads/2007/10/delicious_logo.gif" title="Delicious Logo" alt="Delicious Logo" style="border: 0pt none ; margin: 10px" align="right" />Herrje, nach all diesen Liebesbekundungen, zum eigentlichen Thema zurück. <a href="http://www.symfony-project.com/blog/2007/10/02/delicious-preview-built-with-symfony" title=" Delicious Preview built with symfony">Heute trudelte auch bei mir die Nachricht ein</a>, dass Yahoo, nachdem bereits <a href="http://bookmarks.yahoo.com/" title="Yahoo Bookmarks Webseite">Yahoo Bookmarks</a> auf Symfony basiert, auch die kommende Version des <a href="http://del.icio.us/" title="del.icio.us Webseite">sehr beliebten Social Bookmaringkdienstes Delicious</a> auf Symfony aufsetzt.</p>
<p>Für mich sind solche Nachrichten wie, hm, ja, als ob mich die Eltern meiner Freundin mögen&#8230; Quak! Nein, es bedeutet das meine Entscheidung, wenn sie auch noch so viel aus dem Bauch heraus war, so falsch nicht gewesen sein kann!</p>
<h3>Und was soll nun werden, hm?</h3>
<p>In den nächsten Monaten werde ich das ein oder andere Projekt auf Basis von Symfony umsetzen. Die ersten Härteprüfungen. Ich freue mich darauf. Hoffentlich besteht die Beziehung das. Es gibt sicherlich auch einiges das gegen Symfony spricht. Als erstes mag es die Lernkurve sein, die anfangs doch arg steil ist, aber es lohnt sich!</p>
<p>Vielleicht habe ich ja auch den ein oder anderen auf den Geschmack gebracht. Keine Angst, ein weiterer Vorteil von Symfony ist, dass man es, im Gegensatz zum Partner, gerne teilt&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ausgebloggt.de/2007/10/02/symfony-beginn-einer-liebesgeschichte/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>
