<?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>voodoo-media blog &#187; Symfony</title>
	<atom:link href="http://blog.voodoo-media.de/category/symfony/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.voodoo-media.de</link>
	<description>Hier gibts die gewisse Portion voodoo</description>
	<lastBuildDate>Wed, 04 Nov 2009 21:28:34 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Eigene Validatoren für Symfony Forms</title>
		<link>http://blog.voodoo-media.de/2009/11/eigene-validatoren-fur-symfony-forms/</link>
		<comments>http://blog.voodoo-media.de/2009/11/eigene-validatoren-fur-symfony-forms/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 17:23:01 +0000</pubDate>
		<dc:creator>Markus Ewert</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Propel]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[Forms]]></category>

		<guid isPermaLink="false">http://blog.voodoo-media.de/?p=68</guid>
		<description><![CDATA[Symfony liefert von Haus aus eine Menge Validatoren mit, um Formulareingaben, die ein Nutzer tätigt, zu überprüfen, neudeutsch: zu validieren. Leider reichen diese sonst sehr mächtigen Validatoren nicht immer aus; so auch in einem aktuellen Projekt.
Für E-Mail-Templates gibt es eine ganze Reihe von vordefinierten Platzhaltern, die jeweils als regulärer Ausdruck vorliegen. So wird für die Anrede in einer E-Mail der Platzhalter {salutation} verwendet, der dann gemäß der ausgewählten Sprache ersetzt wird.

Diese Platzhalter sind zwingend notwendig und müssen deshalb nach dem Abschicken des Formular überprüft werden. Dazu haben wir die Validator-Klasse <i>PlaceholderValidator</i> erstellt.]]></description>
			<content:encoded><![CDATA[<p>Symfony liefert von Haus aus eine Menge Validatoren mit, um Formulareingaben, die ein Nutzer tätigt, zu überprüfen, neudeutsch: zu validieren. Leider reichen diese sonst sehr mächtigen Validatoren nicht immer aus; so auch in einem aktuellen Projekt.<br />
Für E-Mail-Templates gibt es eine ganze Reihe von vordefinierten Platzhaltern, die jeweils als regulärer Ausdruck vorliegen. So wird für die Anrede in einer E-Mail der Platzhalter {salutation} verwendet, der dann gemäß der ausgewählten Sprache ersetzt wird.</p>
<p>Diese Platzhalter sind zwingend notwendig und müssen deshalb nach dem Abschicken des Formular überprüft werden. Dazu haben wir die Validator-Klasse <i>PlaceholderValidator</i> erstellt.</p>
<p>
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">class</span> PlaceholderValidator <span style="color: #000000; font-weight: bold;">extends</span> sfValidatorBase
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> configure<span style="color: #009900;">&#40;</span><span style="color: #000088;">$options</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$messages</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> doClean<span style="color: #009900;">&#40;</span><span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$value</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

</p>
<p>Der Klassenrumpf ist einfach erklärt: Enthalten sind zwei Funktionen, <i>configure</i> und </i>doClean</i>. In der ersten Funktion haben wir die Möglichkeit, unserem Validator bestimmte Optionen und Nachrichten zu geben. Optionen werden benötigt, um den Validator bzw. dessen Überprüfungsroutine zu spezifizieren, und Nachrichten werden benötigt, um Fehlermeldungen vorzubereiten. Optionen gibt es bei einem Großteil der symfony-eigenen Validatoren. Mit ihnen können wir angeben, wieviele Zeichen ein String mindest haben muss, und ob ein Formularfeld ein Pflichtfeld ist oder nicht. Ein beispielhafter Funktionskörper könnte passend zum Beispiel des E-Mail-Template-Validators also wie folgt aussehen:</p>
<p>
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> configure<span style="color: #009900;">&#40;</span><span style="color: #000088;">$options</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$messages</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addOption</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'patterns_required'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addMessage</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'patterns_required'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Your template must contain the placeholder &quot;%pattern%&quot;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

</p>
<p>Als nächstes implementieren wir das Herzstück unseres Validators: die <i>doClean</i>-Methode. Der eingegebene Wert im Formularfeld wird von Symfony an die <i>doClean</i> übergeben. Hier erfolgt nun die Validierung dieses Wertes. Um unser E-Mail-Template zu überprüfen, müssen wir mit Hilfe von regulären Ausdrücken prüfen, ob die benötigen Platzhalter im übergeben Wert vorkommen. Dies realisieren wir in einer Schleife und werfen, sofern der reguläre Ausdruck keine Übereinstimmungen findet, einen Fehler. Dieser enthält den Namen der Fehlermeldung, die wir in der <i>configure</i>-Funktion definiert haben, sowie Namen des Platzhalters, der für diesen Fehler verantwortlich ist. Somit erhält der Nutzer eine Fehlermeldung, in dem ihm mitgeteilt wird, welcher Parameter fehlt.</p>
<p>
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> doClean<span style="color: #009900;">&#40;</span><span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$patterns</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getOption</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'patterns'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">hasOption</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'patterns_required'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getOption</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'patterns_required'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$patterns</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$pattern</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;/&quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$pattern</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;/&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
            <span style="color: #009900;">&#123;</span>
                throw <span style="color: #000000; font-weight: bold;">new</span> sfValidatorError<span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'patterns_required'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'pattern'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$pattern</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #b1b100;">return</span> <span style="color: #000088;">$value</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

</p>
<p>Um diesen Validator nun in Formularen zu verwenden, genügt es, dem Validator-Schema mitzuteilen, dass wir unseren Placeholder-Validator nutzen möchten.</p>
<p>
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setValidator</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'template'</span><span style="color: #339933;">,</span> <span style="color: #000000; font-weight: bold;">new</span> PlaceholderValidator<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'patterns_required'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'patterns'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$patterns</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

</p>
<p>Mit den Validatoren gibt Symfony dem Entwickler ein mächtiges Werkzeug in die Hand, welches einfach zu verwenden ist und in allen Formularen zum Einsatz kommen kann.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.voodoo-media.de/2009/11/eigene-validatoren-fur-symfony-forms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>URLs mit .html-Suffix</title>
		<link>http://blog.voodoo-media.de/2009/09/symfony-urls-mit-html-suffix/</link>
		<comments>http://blog.voodoo-media.de/2009/09/symfony-urls-mit-html-suffix/#comments</comments>
		<pubDate>Thu, 17 Sep 2009 17:06:13 +0000</pubDate>
		<dc:creator>Markus Ewert</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[routing]]></category>
		<category><![CDATA[url]]></category>

		<guid isPermaLink="false">http://blog.voodoo-media.de/?p=12</guid>
		<description><![CDATA[Standardmäßig bereitet Symfony die URLs in dem Format /module/action/parameter auf. Dies kann zum Beispiel in einem Blog die URL /article/read/1 sein. Um nun einer Suchmaschine eine statische HTML-Seite zu suggerieren, genügt es, in der Datei settings.yml im Konfigurationsordner einer Applikation folgende Zeilen hinzuzufügen:

1
2
3
prod:
.settings:
suffix:         .html

Symfony erweitert dann selbstständig [...]]]></description>
			<content:encoded><![CDATA[<p>Standardmäßig bereitet Symfony die URLs in dem Format /module/action/parameter auf. Dies kann zum Beispiel in einem Blog die URL /article/read/1 sein. Um nun einer Suchmaschine eine statische HTML-Seite zu suggerieren, genügt es, in der Datei settings.yml im Konfigurationsordner einer Applikation folgende Zeilen hinzuzufügen:</p>
<p>
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="yml" style="font-family:monospace;">prod:
.settings:
suffix:         .html</pre></td></tr></table></div>

<p>Symfony erweitert dann selbstständig die URLs, sodass sie aussehen, als läge dort eine statische HTML-Datei. Die Endung wird nur für die produktive Umgebung aktiviert. Damit alle Umgebungen mit Suffixen arbeiten, genügt es, das &#8216;prod&#8217; durch &#8216;all&#8217; zu ersetzen.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.voodoo-media.de/2009/09/symfony-urls-mit-html-suffix/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

