{"id":191,"date":"2009-11-10T01:15:31","date_gmt":"2009-11-10T00:15:31","guid":{"rendered":"http:\/\/webpiraten.de\/?p=191"},"modified":"2009-11-10T01:15:31","modified_gmt":"2009-11-10T00:15:31","slug":"eigene-configs-in-agavi-nutze","status":"publish","type":"post","link":"https:\/\/webpiraten.de\/index.php\/frameworks\/eigene-configs-in-agavi-nutze\/","title":{"rendered":"Eigene Configs in Agavi nutzen"},"content":{"rendered":"<p>F\u00fcr diverse Aufgaben in gr\u00f6\u00dferen 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\u00fcbersichtlich. Agavi bietet es aber an, eigene Konfigurationsdateien zu erstellen und diese nicht nur zu validieren, sondern auch zur Wiederverwendung zu cachen.<br \/>\nIn der <a href=\"http:\/\/www.mivesto.de\/agavi\/agavi-faq.html#general_22\">Agavi FAQ<\/a> habe ich dazu mal ein Beispiel verfasst.<\/p>\n<p>Einfach einen Config-Handler in der <code>config_handlers.xml<\/code> definieren:<\/p>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\r\n&lt;handler pattern=&quot;%core.config_dir%\/project\/foo\/*.xml&quot; class=&quot;AgaviReturnArrayConfigHandler&quot; \/&gt;\r\n<\/pre>\n<p>und dann direkt in den Actions, Views und Models benutzen:<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\nif (!isset($config&#x5B;'baz']))\r\n{\r\n    throw new LogicException('baz is missing!');\r\n}\r\n\r\nif (isset($config&#x5B;'bars']))\r\n{\r\n    foreach ($config&#x5B;'bars'] as $foo =&gt; $data)\r\n    {\r\n        $this-&gt;doSomethingWithEach($foo, $data);\r\n    }\r\n}\r\n<\/pre>\n<p>Die XML-Datei f\u00fcr den obigen Code k\u00f6nnte beispielweise so aussehen:<\/p>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\r\n&lt;ae:configurations&gt;\r\n    &lt;ae:configuration&gt;\r\n        &lt;baz&gt;asdf&lt;\/baz&gt;\r\n        &lt;foo&gt;-1&lt;\/foo&gt;\r\n        &lt;bars&gt;\r\n            &lt;some&gt;...more data and xml...&lt;\/some&gt;\r\n            &lt;more&gt;...more data and xml...&lt;\/more&gt;\r\n            &lt;deep&gt;...more data and xml...&lt;\/deep&gt;\r\n            &lt;structs&gt;...more data and xml...&lt;\/structs&gt;\r\n        &lt;\/bars&gt;\r\n    &lt;\/ae:configuration&gt;\r\n    &lt;ae:configuration environment=&quot;production.*&quot;&gt;\r\n        &lt;baz&gt;bleh&lt;\/baz&gt;\r\n        &lt;foo&gt;1&lt;\/foo&gt;\r\n    &lt;\/ae:configuration&gt;\r\n&lt;\/ae:configurations&gt;\r\n<\/pre>\n<p>Gut zu erkennen ist der Vorteil eigener Configs: Man kann die Agavi-Features f\u00fcr Konfigurationsdateien nutzen und auf einfache Art und Weise environmentspezifische Einstellungen vornehmen (z.B. in &#8222;Production&#8220; andere Werte f\u00fcr Logdateien, URLs oder Einstellungen nutzen als w\u00e4hrend der Entwicklung oder beim Testen).<\/p>\n<p>Ebenfalls gut zu erkennen im PHP-Code ist, dass man lauter Abfragen \u00fcber die Existenz bestimmer Elemente macht, die man sich mit vern\u00fcnftiger 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>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\r\n&lt;handler pattern=&quot;%core.config_dir%\/project\/foo\/*.foo.xml&quot; class=&quot;FooDefinitionConfigHandler&quot;&gt;\r\n    &lt;validation&gt;%core.config_dir%\/xsd\/foo_definition.xsd&lt;\/validation\/&gt;\r\n&lt;\/handler&gt;\r\n<\/pre>\n<p>Der ConfigHandler k\u00f6nnte so beginnen:<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\nclass FooDefinitionConfigHandler extends AgaviXmlConfigHandler\r\n{\r\n    \/\/ notwendige Methoden implementieren und XML-Struktur validieren...\r\n}\r\n<\/pre>\n<p>F\u00fcr Beispiele einfach in die in Agavi verwendeten XSDs und entsprechende ConfigHandler sehen. Viel Spa\u00df. :)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Eigene XML-Konfigurationsdateien mit Agavi definieren, validieren und verwenden. Eine kurze Einf\u00fchrung mit Beispielnutzung des AgaviReturnArrayConfigHandler.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[27,3,5,79],"tags":[8,116,115,119,117,648,118],"class_list":["post-191","post","type-post","status-publish","format-standard","hentry","category-agavi-framework","category-frameworks","category-php","category-xml","tag-agavi","tag-confighandler","tag-konfiguration","tag-schema","tag-validierung","tag-xml","tag-xsd"],"_links":{"self":[{"href":"https:\/\/webpiraten.de\/index.php\/wp-json\/wp\/v2\/posts\/191","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webpiraten.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webpiraten.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webpiraten.de\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/webpiraten.de\/index.php\/wp-json\/wp\/v2\/comments?post=191"}],"version-history":[{"count":6,"href":"https:\/\/webpiraten.de\/index.php\/wp-json\/wp\/v2\/posts\/191\/revisions"}],"predecessor-version":[{"id":197,"href":"https:\/\/webpiraten.de\/index.php\/wp-json\/wp\/v2\/posts\/191\/revisions\/197"}],"wp:attachment":[{"href":"https:\/\/webpiraten.de\/index.php\/wp-json\/wp\/v2\/media?parent=191"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webpiraten.de\/index.php\/wp-json\/wp\/v2\/categories?post=191"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webpiraten.de\/index.php\/wp-json\/wp\/v2\/tags?post=191"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}