<?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>WEBPIRATEN &#187; Konfiguration</title>
	<atom:link href="http://webpiraten.de/index.php/tag/konfiguration/feed/" rel="self" type="application/rss+xml" />
	<link>http://webpiraten.de</link>
	<description>Techblog</description>
	<lastBuildDate>Sun, 05 Feb 2012 12:52:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Eigene Configs in Agavi nutzen</title>
		<link>http://webpiraten.de/index.php/frameworks/eigene-configs-in-agavi-nutze/</link>
		<comments>http://webpiraten.de/index.php/frameworks/eigene-configs-in-agavi-nutze/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 00:15:31 +0000</pubDate>
		<dc:creator>graste</dc:creator>
				<category><![CDATA[Agavi]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[agavi]]></category>
		<category><![CDATA[ConfigHandler]]></category>
		<category><![CDATA[Konfiguration]]></category>
		<category><![CDATA[Schema]]></category>
		<category><![CDATA[Validierung]]></category>
		<category><![CDATA[XSD]]></category>

		<guid isPermaLink="false">http://webpiraten.de/?p=191</guid>
		<description><![CDATA[Eigene XML-Konfigurationsdateien mit Agavi definieren, validieren und verwenden. Eine kurze Einführung mit Beispielnutzung des AgaviReturnArrayConfigHandler. <a href="http://webpiraten.de/index.php/frameworks/eigene-configs-in-agavi-nutze/">weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Für diverse Aufgaben in größeren Projekten ist es notwendig, eigene XML-Konfigurationsdateien zu nutzen. Die Definition umfangreicher Einstellungen in der settings.xml wird schnell anstrengend und das Holen der Werte per <code>AgaviConfig::get('setting.name', 'default');</code> unübersichtlich. Agavi bietet es aber an, eigene Konfigurationsdateien zu erstellen und diese nicht nur zu validieren, sondern auch zur Wiederverwendung zu cachen.<br />
In der <a href="http://www.mivesto.de/agavi/agavi-faq.html#general_22">Agavi FAQ</a> habe ich dazu mal ein Beispiel verfasst.</p>
<p>Einfach einen Config-Handler in der <code>config_handlers.xml</code> definieren:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;handler pattern=&quot;%core.config_dir%/project/foo/*.xml&quot; class=&quot;AgaviReturnArrayConfigHandler&quot; /&gt;
</pre>
<p>und dann direkt in den Actions, Views und Models benutzen:</p>
<pre class="brush: php; title: ; notranslate">
if (!isset($config['baz']))
{
    throw new LogicException('baz is missing!');
}

if (isset($config['bars']))
{
    foreach ($config['bars'] as $foo =&gt; $data)
    {
        $this-&gt;doSomethingWithEach($foo, $data);
    }
}
</pre>
<p>Die XML-Datei für den obigen Code könnte beispielweise so aussehen:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;ae:configurations&gt;
    &lt;ae:configuration&gt;
        &lt;baz&gt;asdf&lt;/baz&gt;
        &lt;foo&gt;-1&lt;/foo&gt;
        &lt;bars&gt;
            &lt;some&gt;...more data and xml...&lt;/some&gt;
            &lt;more&gt;...more data and xml...&lt;/more&gt;
            &lt;deep&gt;...more data and xml...&lt;/deep&gt;
            &lt;structs&gt;...more data and xml...&lt;/structs&gt;
        &lt;/bars&gt;
    &lt;/ae:configuration&gt;
    &lt;ae:configuration environment=&quot;production.*&quot;&gt;
        &lt;baz&gt;bleh&lt;/baz&gt;
        &lt;foo&gt;1&lt;/foo&gt;
    &lt;/ae:configuration&gt;
&lt;/ae:configurations&gt;
</pre>
<p>Gut zu erkennen ist der Vorteil eigener Configs: Man kann die Agavi-Features für Konfigurationsdateien nutzen und auf einfache Art und Weise environmentspezifische Einstellungen vornehmen (z.B. in &#8220;Production&#8221; andere Werte für Logdateien, URLs oder Einstellungen nutzen als während der Entwicklung oder beim Testen).</p>
<p>Ebenfalls gut zu erkennen im PHP-Code ist, dass man lauter Abfragen über die Existenz bestimmer Elemente macht, die man sich mit vernünftiger Validierung sparen kann, da invalide XML-Dokumente gar nicht erst als korrekt angesehen werden von Agavi. Um seine XML-Strukturen zu validieren definiert man per <code>validation</code> Parameter ein XML-Schema und definiert noch gleich einen eigenen ConfigHandler, den man schreibt und per <code>autoload.xml</code> bekannt macht:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;handler pattern=&quot;%core.config_dir%/project/foo/*.foo.xml&quot; class=&quot;FooDefinitionConfigHandler&quot;&gt;
    &lt;validation&gt;%core.config_dir%/xsd/foo_definition.xsd&lt;/validation/&gt;
&lt;/handler&gt;
</pre>
<p>Der ConfigHandler könnte so beginnen:</p>
<pre class="brush: php; title: ; notranslate">
class FooDefinitionConfigHandler extends AgaviXmlConfigHandler
{
    // notwendige Methoden implementieren und XML-Struktur validieren...
}
</pre>
<p>Für Beispiele einfach in die in Agavi verwendeten XSDs und entsprechende ConfigHandler sehen. Viel Spaß. :)</p>
]]></content:encoded>
			<wfw:commentRss>http://webpiraten.de/index.php/frameworks/eigene-configs-in-agavi-nutze/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

