<?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>Blog :: deam.org &#187; MVC</title>
	<atom:link href="http://blog.deam.org/tag/mvc/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.deam.org</link>
	<description>hier schreibt Klaus M. Brantl</description>
	<lastBuildDate>Wed, 25 Jan 2012 16:18:54 +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>MVC: ein schöner Gedanke</title>
		<link>http://blog.deam.org/2008/09/05/mvc-ein-schoner-gedanke/</link>
		<comments>http://blog.deam.org/2008/09/05/mvc-ein-schoner-gedanke/#comments</comments>
		<pubDate>Fri, 05 Sep 2008 12:33:30 +0000</pubDate>
		<dc:creator>Klaus M. Brantl</dc:creator>
				<category><![CDATA[PHP/ PHP-Frameworks/ CakePHP]]></category>
		<category><![CDATA[app_model.php]]></category>
		<category><![CDATA[beforeSave()]]></category>
		<category><![CDATA[MVC]]></category>

		<guid isPermaLink="false">http://blog.deam.org/?p=12</guid>
		<description><![CDATA[Ich verwende die Version 1.2. Aktuell in zwei Varianten mit dem RC2 und einem einigermassen aktuellem NightlyBuild. Ich gehe davon aus, das ich noch eine Weile benötige um richtig drin zu sein und dann sollte ja ggf. schon ein RC3 oder eine Release in Aussicht stehen. Nach dem Einlesen war mir klar, das ich mit [...]]]></description>
			<content:encoded><![CDATA[<p>Ich verwende die Version 1.2. Aktuell in zwei Varianten mit dem RC2 und einem einigermassen aktuellem NightlyBuild. Ich gehe davon aus, das ich noch eine Weile benötige um richtig drin zu sein und dann sollte ja ggf. schon ein RC3 oder eine Release in Aussicht stehen.</p>
<p>Nach dem Einlesen war mir klar, das ich mit dem 1.1 nicht mehr anfangen will, da hier einige grundlegende Teile fehlen. Zumindest so grundlegendes, dass ich nicht wirklich den Vorteil zu meinem framework gesehen habe. Das entscheidend neue (zumindest für mich) an 1.2 sind die eingebauten Validierungsregeln &#8211; das ist in der 1.1er deutlich &#8220;schlanker&#8221;.</p>
<p><strong>Aber fangen wir doch mal von vorne an: MVC.</strong><span id="more-12"></span></p>
<p>Ich bin ein Scripter. Ich schreibe schon eine gute Weile Perl- und fast genauso lange PHP-Scipts. ich denke von oben nach unten und habe mich eigentlich erst in den letzten 4 Jahren stärker auf Trennungen von Funktion und Inhalt konzentriert (vorher schon auch, aber eben nicht so intensiv).</p>
<p>Das MVC-Prinzip (Model-View-Controller) wird auf der <a href="http://book.cakephp.org/de/view/11/%C3%9Cbersicht">CakePHP-Seite</a> auch schön in deutsch beschrieben. Im Grunde ist es keine Hexerei. Es bedeutet aber viel Selbstbeherrschung. Der View-Teil ist dabei noch am leichtesten &#8211; nach dem Motto &#8220;hier nur Zeug zum Anzeigen rein und ausser ein paar IF-Abfragen keine wirkliche Logik machen&#8221;.</p>
<p>Model und Controller lassen sich dabei aber schon nicht mehr so gut trennen. Bzw. ist die Gefahr gross, dass man die Trennung nicht so klar macht. Ich habe inzwischen angefangen mich sehr auf die Callbackfunktionen zu konzentrieren. Diese stehen eigentlich immer jeweils nur in einem Typ zur Verfügung. Z.B. wenn ich <a href="http://book.cakephp.org/de/view/76/Callback-Methods">beforeSave()</a> verwende, dann ist das ein Model-Callback. Wenn ich also Daten kurz vorm Speichern (und in diesem Fall nach Validierung) noch &#8220;korrigieren&#8221; will, dann ist das der richtige Platz. Und da das beforeSave() nur in der Model-Klasse verfügbar ist, muss ich mch auch gar nicht aktiv zwischen Controller und Model entscheiden :-)</p>
<p>Was mir gestern erst so richtig klar geworden ist, dass man Superklassen hat. (WARNUNG: ich bin wie gesagt ein Scripter, deshalb kann es jetzt schonmal vorkommen, dass ich die Bezeichnungen nicht immer ganz korrekt hinbekomme). Das heisst man kann die Model-Klasse an oberster Stelle modifzieren. D.h. also ich kann mit app_model.php direkt im app-Ordner z.B. diese Funktion einsetzen:</p>
<pre class="ln-"><code class="php">class AppModel extends Model {
	function beforeSave()
	{
		/**
		 * Überprüft die Metadaten des Models und setzt dann die aktuellen Daten auf "null", wenn kein Inhalt gegeben ist.
		 *
		 * http://bakery.cakephp.org/articles/view/null-behavior
		 */

		$tableInfo = $this-&gt;schema();
		foreach ($tableInfo as $name =&gt; $field)
		{
			if($field['null'])
			{
				if(isset($this-&gt;data[$this-&gt;name][$name]) &amp;&amp; $this-&gt;data[$this-&gt;name][$name] === '')
				{
					$this-&gt;data[$this-&gt;name][$name] = null;
				}
			}
		}

		return true;
	}
}</code></pre>
<p>(Aus den Kommentaren der Bäckerei: <a href="http://bakery.cakephp.org/articles/view/null-behavior">http://bakery.cakephp.org/articles/view/null-behavior</a>)</p>
<p>Das nenne ich Handwerkszeug. Solche Funktionen sind nicht Bestandteil von CakePHP &#8211; auch nicht als Konfigurationsoptionen. Es ist aber nicht besonders schwer sowas zu integrieren. Und genau daran arbeite ich gerade, da ich möglichst viel Funktionsweisen in eine Form bringen möchte, damit ich sie wiederverwenden kann. Da würde dann wohl auch der <strong>vendor</strong>-Ordner mit hereinspielen. Aber soweit bin ich noch nicht :-)<br />
Ich arbeite mit einer MySQL und diese unterscheidet sehr wohl zwischen einem leeren String oder eben NULL. Und gerade bei formalen Feldtypen wie &#8220;date&#8221; ist es entscheidend ein NULL setzen zu können, wenn z.B. ein Geburtsdatum in der Adressverwaltung optional ist.</p>
<p>Aktuell integriere ich dieses Beispiel <a href="http://bakery.cakephp.org/articles/view/using-the-unobtrusive-date-picker-widget-in-cakephp">http://bakery.cakephp.org/articles/view/using-the-unobtrusive-date-picker-widget-in-cakephp</a> für eine Datumsauswahl in der app_model.php &#8211; und zwar in einer Form das ich mich damit nicht mehr weiter befassen muss und in der entsprechenden View nur noch entscheiden muss &#8220;will ich oder will ich nicht&#8221;. Der Standardselektor für Datumsauswahl gefällt mir nämlich ganz und gar nicht.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.deam.org/2008/09/05/mvc-ein-schoner-gedanke/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

