<?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>MarcelMarnix.Com &#187; Doctrine</title>
	<atom:link href="http://marcelmarnix.com/wordpress/category/tutorials/doctrine/feed" rel="self" type="application/rss+xml" />
	<link>http://marcelmarnix.com/wordpress</link>
	<description>MarcelMarnix.Com Codigniter &#38; Doctrine Tips Trucks en Lessen</description>
	<lastBuildDate>Thu, 23 Feb 2012 11:14:02 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Deel 2 Codeigniter met Doctrine de Basis</title>
		<link>http://marcelmarnix.com/wordpress/tutorials/codeigniter/codeigniter-met-doctrine-deel-2-de-basis</link>
		<comments>http://marcelmarnix.com/wordpress/tutorials/codeigniter/codeigniter-met-doctrine-deel-2-de-basis#comments</comments>
		<pubDate>Mon, 14 Dec 2009 22:47:31 +0000</pubDate>
		<dc:creator>MarcelMarnix</dc:creator>
				<category><![CDATA[Codeigniter]]></category>
		<category><![CDATA[Doctrine]]></category>

		<guid isPermaLink="false">http://marcelmarnix.com/wordpress/?p=59</guid>
		<description><![CDATA[
In dit 2e Deel:
- We bekijken in het kort de basis concepten van CodeIgniter en Doctrine.
- Eerst bekijken we Controllers and Views in CodeIgniter.
- Dan oefenen we met Models in Doctrine.
Hier wordt alles een beetje anders vergeleken met andere Codeigniter tutorials.
- Op het laatst bekijken we het Doctrine Model en praten we over wat ons [...]]]></description>
			<content:encoded><![CDATA[<div class='series_toc' style="border: 1px solid rgb(183, 169, 154); padding: 10px; background-color: rgb(255, 255, 255); -moz-border-radius-topleft: 4px; -moz-border-radius-topright: 4px; -moz-border-radius-bottomright: 4px; -moz-border-radius-bottomleft: 4px; margin-bottom: 20px;"><h4>Inhoudsopgave voor CodeIgniter met Doctrine Serie</h4><ol><li><a href='http://marcelmarnix.com/wordpress/tutorials/codeigniter/deel1-codeigniter-en-doctrine-installeren' title='Deel 1 Codeigniter en Doctrine vanaf het begin – Installatie and Setup'>Deel 1 Codeigniter en Doctrine vanaf het begin – Installatie and Setup</a></li><li>Deel 2 Codeigniter met Doctrine de Basis</li></ol></div> <div><img class="alignleft" title="codeigniter_doctrine" src="http://www.phpandstuff.com/wp-content/uploads/2009/10/codeigniter_doctrine.png" alt="codeigniter_doctrine" width="128" height="128" /></div>
<h2>In dit 2e Deel:</h2>
<div>- We bekijken in het kort de <strong>basis concepten</strong> van CodeIgniter en Doctrine.</div>
<div>- Eerst bekijken we <strong>Controllers</strong> and <strong>Views</strong> in CodeIgniter.</div>
<div>- Dan oefenen we met <strong>Models</strong> in Doctrine.<br />
Hier wordt alles een beetje anders vergeleken met andere Codeigniter tutorials.</div>
<div>- Op het laatst bekijken we het <strong>Doctrine Model</strong> en praten we over wat ons <strong>Hoofd project</strong> wordt.</div>
<div>
<h3>Voordat we starten zorg dat <span style="text-decoration: underline;"><a href="http://marcelmarnix.com/wordpress/tutorials/codeigniter/deel1-codeigniter-en-doctrine-installeren">Deel1</a></span> volledig is doorlopen.</h3>
<p style="text-align: left;"><span id="more-59"></span>Met de bestanden van  <span style="text-decoration: underline;"><span style="text-decoration: underline;"><a href="http://marcelmarnix.com/wordpress/tutorials/codeigniter/deel1-codeigniter-en-doctrine-installeren">Deel1</a></span></span>:</p>
<ul>
<li><strong>Verwijder</strong>: application/models/gebruiker.php</li>
<li><strong>Verwijder</strong>: application/controllers/hallo.php</li>
<li><strong>Verwijder tabel</strong>: gebruiker</li>
</ul>
<h3>CodeIgniter URL structuur</h3>
<p>Url’s in CodeIgniter kunnen er zo uit zien:</p>
<p>Deze url roept de <strong>controller class</strong> “CONTROLLER_NAAM” aan en roept zijn <strong>methode</strong> (functie) “METHODE_NAAM” aan:</p>
<pre class="brush: plain; light: true;">http://localhost/ci_doctrine/index.php/CONTROLLER_NAAM/METHODE_NAAM</pre>
<p>Hetzelfde als hiervoor, behalve de url roept de standaard <strong>index()</strong> methode aan:</p>
<pre class="brush: plain; light: true;">http://localhost/ci_doctrine/index.php/CONTROLLER_NAME</pre>
<p>Hetzelfde als hiervoor. Deze keer, geeft de url een waarde “WAARDE” door als een <strong>argument</strong> voor de controller methode:</p>
<pre class="brush: plain; light: true;">http://localhost/ci_doctrine/index.php/CONTROLLER_NAAM/METHODE_NAAM/WAARDE</pre>
<p>De waarde kan een Nummer of een string zijn.<br />
Er kunnen meer waarden aan de url worden toegevoegd voor het doorgeven van toevoegende waarden. <strong><br />
Voor meer info</strong>: <a onclick="javascript:pageTracker._trackPageview('/outbound/article/codeigniter.com');" rel="nofollow" href="http://codeigniter.com/user_guide/general/controllers.html#passinguri">Passing uri segments</a></p>
<h3>CodeIgniter <del>M</del>VC (<del>Model</del> – View – Controller)</h3>
<h4>Models</h4>
<p>We gaan <strong>Doctrine Model</strong>’s, gebruiken i.p.v. CodeIgniter. Later in deze les zal ik uitleggen waarom. Wil je toch meer weten over CodeIgniter Models, lees: <a onclick="javascript:pageTracker._trackPageview('/outbound/article/codeigniter.com');" rel="nofollow" href="http://codeigniter.com/user_guide/general/models.html">CodeIgniter Models</a></p>
<h4>Views</h4>
<ul>
<li>Views worden gemaakt onder <strong>application/views</strong> en hebben een bestandsnaam als: mijn_view.php</li>
<li>Het zijn de <strong>output templates</strong>. Ze kunnen html, javascript en meer bevatten.</li>
<li>Gewoonlijk bevatten views <strong>PHP</strong> code. (Om boodschappen door te geven, lussen uit te voeren etc…)</li>
<li>Normaal laden Controllers, views om de uitvoer weer te geven.</li>
</ul>
<p><strong>Officiële documentatie:</strong> <a onclick="javascript:pageTracker._trackPageview('/outbound/article/codeigniter.com');" rel="nofollow" href="http://codeigniter.com/user_guide/general/views.html">CodeIgniter Views</a></p>
<h4>Controllers</h4>
<p>We hebben dit al behandeld in <a href="http://marcelmarnix.com/wordpress/tutorials/codeigniter/deel1-codeigniter-en-doctrine-installeren">Deel 1</a>. Bekijk de sectie <strong>“</strong><strong>Snelle CodeIgniter cursus: Controllers</strong><strong>”</strong>.</p>
<h4>Controller en View bij elkaar</h4>
<p>Hier is een voorbeeld View</p>
<pre class="brush: plain; light: true;">application/views/my_view.php</pre>
<pre class="brush: php;">Een beetje text.

  &lt;div&gt;
    Men kan zelfs HTML gebruiken.
  &lt;/div&gt;

  &lt;div&gt;
   Geef variabelen doorgeven van de controller weer: &lt;br /&gt;
   &lt;?php echo $boodschap; ?&gt; &lt;br /&gt;
   &lt;?php echo $nog_een_boodschap; ?&gt;
  &lt;/div&gt;

Men kan lussen gebruiken: &lt;br /&gt;
  &lt;?php for ($i = 0; $i &lt; 3; $i++) {

   echo &quot;Teller geeft weer: $i &lt;br /&gt;&quot;;

  } ?&gt;

Of in alternatieve syntaxis: &lt;br /&gt;
  &lt;?php for ($i = 0; $i &lt; 3; $i++): ?&gt;

   Teller geeft weer: &lt;?php echo $i; ?&gt; &lt;br /&gt;

  &lt;?php endfor; ?&gt;</pre>
<p>Hier is een voorbeeld Controller, deze laad de view:</p>
<pre class="brush: plain; light: true;">application/controllers/sample_controller.php</pre>
<pre class="brush: php;">class Sample_controller extends Controller {

   function index() {
     $data = array();
     $data['message'] = &quot;index was aangeroepen&quot;;
     $data['another_message'] = &quot;blah blah&quot;;

     $this-&gt;load-&gt;view('my_view',$data);
   }

}</pre>
<p>Beide url’s werken:</p>
<pre class="brush: plain; light: true;">http://localhost/ci_doctrine/index.php/sample_controller/index
http://localhost/ci_doctrine/index.php/sample_controller</pre>
<p>De browser geeft weer:</p>
<pre class="brush: plain; light: true;">Een stukje tekst.
Men kan HTML gebruiken.
Geef variabelen weer vanuit de controller:
index was aangeroepen
blah blah
Je kunt zelfs lussen gebruiken:
Teller geeft weer: 0
Teller geeft weer: 1
Teller geeft weer: 2
Of in alternatieve syntaxis:
Teller geeft weer: 0
Teller geeft weer: 1
Teller geeft weer: 2</pre>
<p><strong>Let op!:</strong></p>
<ul>
<li>View bevat een combinatie van <strong>ruwe uitvoer</strong> en <strong>simpele PHP</strong>.</li>
<li>index() is de <strong>Standaard</strong> Controller functie, du die hoeven we niet in de url te plaatsen.</li>
<li>$this-&gt;load-&gt;view(’my_view’,$data) <strong>laad</strong> de view en voert hem door naar de browser.</li>
<li>Het eerste argument ‘my_view’ is de <strong>naam van het view bestand</strong>, zonder het .php stuk.</li>
<li>Het tweede argument $data is een array, welke de waarden aan de view doorgeeft.</li>
<li><strong>Voorbeeld</strong>: $data['boodschap'] <strong>wordt $boodschap</strong>, en $data['nog_een_boodschap] <strong>wordt $nog_een_boodschap</strong>, in onze view.</li>
</ul>
<p>(Wanneer je de bestanden hebt aangemaakt om de code te testen, dan kun je ze nu verwijderen. We gaan ze niet  meer gebruiken in ons project.)</p>
<h3>Doctrine Models</h3>
<p>Models zijn klassen welke data presenteren (vanuit de database). Bijvoorbeeld, Je kunt een tabel hebben genaamd <strong>user</strong>.  We kunnen een Model Class bouwen genaamd “User” welke de records in de tabel vertegenwoordigd(vasthoud).  Onze Model klasse zou <strong>CRUD</strong> (Create, Read, Update and Delete) handelingen moeten kunnen uitvoeren.  Gelukkig, Doctrine is een grote hulp om dit voor elkaar te krijgen met minimale en schone code.</p>
<h4>Verschillen in gebruik (vergeleken met CodeIgniter Models)</h4>
<ul>
<li>Ze extenden(overhandigen) de <strong>Doctrine_Record</strong> class<br />
(i.p.v. de “Model” class).</li>
<li>Ze kunnen als volgt geladen worden: <strong>$u = new User();</strong><br />
(i.p.v.: <strong>$u = $this-&gt;load-&gt;model(’user’);</strong>)<br />
met dank aan Doctrine&#8217;s <strong>autoload</strong> welke we in onze plugin hebben geregistreerd.</li>
<li>Het is niet PHP4 compatible.</li>
</ul>
<p>Dat is alles wat je nu moet weten.  Het zal een makkelijke overgang zijn voor diegene die CodeIgniter al gebruikt.</p>
<h4>Hoe ziet Doctrine Model er uit?</h4>
<p>Hier is een kleine <strong>Vooruitblik</strong> op het soort Modellen welke we gaan bouwen.  In de volgende lessen gaan we daar gedetailleerder op in.</p>
<pre class="brush: php;">&lt;?php
class User extends Doctrine_Record
{

  // definieer tabel kolommen in deze functie
  public function setTableDefinition() {

     $this-&gt;hasColumn('username', 'string', 255);
     $this-&gt;hasColumn('password', 'string', 255);
     $this-&gt;hasColumn('email', 'string', 255, array(
     'email' =&gt; true // de email input kan gevalideerd worden
     ));

     // Support vele kolom types, inclusief enum
     $this-&gt;hasColumn('status', 'enum', null,
     array('values' =&gt; array('unverified', 'verified', 'disabled'))
     );
   }

   // set wat options
   public function setUp() {

     // maak een relatie met het Post model
     $this-&gt;hasMany('Post as Posts');

     // kan zelfs met zichzelf een relatie hebben
     $this-&gt;hasOne('User as Referer');

     // 'created_at' en 'updated_at' worden automatisch aangemaakt en bijgewerkt
     $this-&gt;actAs('Timestampable');

     // Het password veld krijgt een mutator veld toegewezen, voor automatische encryptie
     $this-&gt;hasMutator('password', 'md5Password');

   }

   // de mutator functie
   public function md5Password($value) {
     $this-&gt;_set('password', md5($value));
   }

}</pre>
<p>Wanneer we een Doctrine Model’s zoals deze hebben gebouwd, kunnen we allerlei database acties doen. Doctrine kan zelfs <strong>de tabel maken</strong> gebaseerd op alleen de informatie van de modellen. Houd in gedachten dat er andere manieren zijn om Doctrine Models te maken, Bijvoorbeeld gebruikmakend van Schema bestanden. Hier komen we later op terug.</p>
<h3>Blijf Gekluisterd&#8230;</h3>
<p>In het volgende deel, beginennen we met een project, het wordt een <strong>Message Board</strong> en waarschijnlijk meer… Dit is een goede keus door de vele relaties tussen models als : users, posts, threads, forums, groups, attachments enz… Tot de volgende keer!</p>
</div>
 <div class='series_links'><a href='http://marcelmarnix.com/wordpress/tutorials/codeigniter/deel1-codeigniter-en-doctrine-installeren' title='Deel 1 Codeigniter en Doctrine vanaf het begin – Installatie and Setup'>Vorige in de serie</a> </div>]]></content:encoded>
			<wfw:commentRss>http://marcelmarnix.com/wordpress/tutorials/codeigniter/codeigniter-met-doctrine-deel-2-de-basis/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Deel 1 Codeigniter en Doctrine vanaf het begin – Installatie and Setup</title>
		<link>http://marcelmarnix.com/wordpress/tutorials/codeigniter/deel1-codeigniter-en-doctrine-installeren</link>
		<comments>http://marcelmarnix.com/wordpress/tutorials/codeigniter/deel1-codeigniter-en-doctrine-installeren#comments</comments>
		<pubDate>Mon, 14 Dec 2009 11:29:12 +0000</pubDate>
		<dc:creator>MarcelMarnix</dc:creator>
				<category><![CDATA[Codeigniter]]></category>
		<category><![CDATA[Doctrine]]></category>

		<guid isPermaLink="false">http://marcelmarnix.com/wordpress/?p=5</guid>
		<description><![CDATA[
In dit 1e deel
- We beginnen met de basis installatie van CodeIgniter en Doctrine als plugin.

Waarom Doctrine toevoegen aan CodeIgniter?
Create, Read, Update en Delete (CRUD)
Creëer, Lees, Bewerk en Verwijder bewerkingen worden veel makkelijker uitgevoerd
doordat Tabellen en hun Relaties als Objecten worden gezien.
Er zijn nog veel meer voordelen maar deze zullen we verderop behandelen.
Voor meer informatie: [...]]]></description>
			<content:encoded><![CDATA[<div class='series_toc' style="border: 1px solid rgb(183, 169, 154); padding: 10px; background-color: rgb(255, 255, 255); -moz-border-radius-topleft: 4px; -moz-border-radius-topright: 4px; -moz-border-radius-bottomright: 4px; -moz-border-radius-bottomleft: 4px; margin-bottom: 20px;"><h4>Inhoudsopgave voor CodeIgniter met Doctrine Serie</h4><ol><li>Deel 1 Codeigniter en Doctrine vanaf het begin – Installatie and Setup</li><li><a href='http://marcelmarnix.com/wordpress/tutorials/codeigniter/codeigniter-met-doctrine-deel-2-de-basis' title='Deel 2 Codeigniter met Doctrine de Basis'>Deel 2 Codeigniter met Doctrine de Basis</a></li></ol></div> <p><img class="size-full wp-image-14 alignleft" title="codeigniter_doctrine" src="http://marcelmarnix.com/wordpress/wp-content/uploads/2009/12/codeigniter_doctrine.png" alt="CodeIgniter + Doctrine" width="102" height="102" /></p>
<h2>In dit 1e deel</h2>
<p>- We beginnen met de basis installatie van CodeIgniter en Doctrine als plugin.</p>
<p><span id="more-5"></span></p>
<h3>Waarom Doctrine toevoegen aan CodeIgniter?</h3>
<p><strong>C</strong>reate, <strong>R</strong>ead, <strong>U</strong>pdate en <strong>D</strong>elete (<strong>CRUD</strong>)</p>
<p>Creëer, Lees, Bewerk en Verwijder bewerkingen worden veel makkelijker uitgevoerd<br />
doordat <strong>Tabellen </strong>en hun <strong>Relaties </strong>als <strong>Objecten </strong>worden gezien.</p>
<p>Er zijn nog veel meer voordelen maar deze zullen we verderop behandelen.<br />
Voor meer informatie: <a onclick="javascript:pageTracker._trackPageview('/outbound/article/www.doctrine-project.org');" rel="nofollow" href="http://www.doctrine-project.org/documentation/manual/1_1/en/introduction" target="_blank">Doctrine Introductie (Engels)</a></p>
<p><img class="aligncenter size-full wp-image-23" title="ci_doctrine_model" src="http://marcelmarnix.com/wordpress/wp-content/uploads/2009/12/ci_doctrine_model1.png" alt="ci_doctrine_model" width="600" height="900" /></p>
<p>In bovenstaand voorbeeld spreekt de <strong>Controller </strong>van <strong>Codeigniter </strong>het Doctrine <strong>ORM </strong>i.p.v. het <strong>Model </strong>aan.</p>
<p>We gebruiken MySQL database maar door de <strong>PDO</strong> kan er ook een andere database worden gekozen.</p>
<h3>De Eerste stap, het opzetten van de ontwikkelomgeving</h3>
<p>Wanneer er al een <strong>Webserver met PHP en MySQL</strong> is geïnstalleerd, kun je sommige van deze stappen overslaan.</p>
<ul>
<li>Download en installeer <a onclick="javascript:pageTracker._trackPageview('/outbound/article/www.wampserver.com');" href="http://www.wampserver.com/en/">WAMP</a> (voor Mac: <a onclick="javascript:pageTracker._trackPageview('/outbound/article/www.mamp.info');" rel="nofollow" href="http://www.mamp.info/">MAMP</a>)<br />
<em>Waarschuwing <strong>Skype</strong> gebruikers: Eerst moet Skype worden afgesloten door een poort conflict, na opstarten van wamp kan skype weer worden gestart.</em></li>
<li>Bezoek <a onclick="javascript:pageTracker._trackPageview('/outbound/article/localhost');" rel="nofollow" href="http://localhost/">http://localhost/</a> in je browser en check of de link werkt.</li>
<li>Open de &#8220;www&#8221; folder onder de WAMP installatie (Standaard <strong>C:\WAMP\WWW\</strong> ).</li>
<li>Maak hierin de folder &#8220;<strong>ci_doctrine</strong>&#8221; aan.</li>
</ul>
<h3>Installeer CodeIgniter</h3>
<ul>
<li><a onclick="javascript:pageTracker._trackPageview('/outbound/article/codeigniter.com');" href="http://codeigniter.com/downloads/">Download CodeIgniter</a></li>
<li>Pak het bestand uit in de  “ci_doctrine″ map.</li>
<li>Voor een goed overzicht verwijder ik altijd de “user_guide” folder en haal de apps map buiten de system map.</li>
</ul>
<p>De nieuwe mappen zien er zo uit:</p>
<div id="attachment_40" class="wp-caption aligncenter" style="width: 175px"><img class="size-full wp-image-40" title="vbCiInstall" src="http://marcelmarnix.com/wordpress/wp-content/uploads/2009/12/vbCiInstall.png" alt="Installatie CI" width="165" height="250" /><p class="wp-caption-text">Installatie CI</p></div>
<p>In de ci_doctrine map, bevindt zich &#8220;index.php&#8221;</p>
<ul>
<li>Ga naar <a onclick="javascript:pageTracker._trackPageview('/outbound/article/localhost');" rel="nofollow" href="http://localhost/ci_doctrine">http://localhost/ci_doctrine</a></li>
</ul>
<ul>
<li>Check of onderstaand voorbeeld te zien is:</li>
</ul>
<p style="text-align: center;"><img class="aligncenter" title="ci_doctrine_day1_3" src="http://www.phpandstuff.com/wp-content/uploads/2009/10/ci_doctrine_day1_3.png" alt="ci_doctrine_day1_3" width="500" height="276" /></p>
<h3>Snelle CodeIgniter cursus: Controllers</h3>
<p><strong>Controllers</strong> worden aangeroepen met het laden van iedere pagina.<br />
Controller staan onder:</p>
<pre>ci_doctrine/application/controllers/</pre>
<p>De <strong>url</strong> ziet er als volgt uit:</p>
<pre>http://localhost/ci_doctrine/index.php/CONTROLLER_NAAM/FUNCTION_NAAM</pre>
<p>Bijvoorbeeld wanneer de volgende url wordt geopend:</p>
<pre>http://localhost/ci_doctrine/index.php/hallo/wereld</pre>
<p>CodeIgniter zoekt naar<strong> controller classe</strong> genaamd “Hallo” en roept zijn <strong>methode</strong> “wereld()” aan.</p>
<h3>Onze eerste Controller</h3>
<ul>
<li>Maak het bestand aan:</li>
<pre>ci_doctrine/application/controllers/hallo.php</pre>
</ul>
<pre class="brush: php;">&lt;?php
//application/controllers/hallo.php

class Hallo extends Controller {

 function wereld() {
   echo &quot;Hallo CodeIgniter!&quot;;
 }

}</pre>
<ul>
<li>Ga naar: <a onclick="javascript:pageTracker._trackPageview('/outbound/article/localhost');" rel="nofollow" href="http://localhost/ci_doctrine/index.php/hallo/wereld">http://localhost/ci_doctrine/index.php/hallo/wereld</a></li>
</ul>
<p>Nu zie je:</p>
<pre>Hallo CodeIgniter!</pre>
<p><strong>Let op!:</strong></p>
<ul>
<li>De <strong>klasse </strong>moet de controller <strong>extenden (uitbreiden)</strong>.</li>
<li>De <strong>klasse </strong>moet <strong>beginnen </strong>met een <strong>Hoofdletter</strong>.</li>
<li>De <strong>bestandsnaam </strong>moet met <strong>kleine letters</strong> zijn geschreven.</li>
</ul>
<p><strong>Aanbevolen leesmateriaal:</strong></p>
<ul>
<li><a onclick="javascript:pageTracker._trackPageview('/outbound/article/codeigniter.com');" rel="nofollow" href="http://codeigniter.com/user_guide/general/controllers.html">http://codeigniter.com/user_guide/general/controllers.html</a></li>
</ul>
<h3>Install Doctrine</h3>
<p>In CodeIgniter gaan we Doctrine  als <strong>plug-in</strong> installeren.</p>
<ul>
<li>Maak de map: application/plugins</li>
<li>Maak de map: application/plugins/doctrine</li>
<li><a onclick="javascript:pageTracker._trackPageview('/outbound/article/www.doctrine-project.org');" href="http://www.doctrine-project.org/download">Download Doctrine</a></li>
<li>Pak alleen de folder “lib” uit naar<strong> application/plugins/doctrine</strong>.</li>
</ul>
<p>Onze map ziet er als volgt uit:</p>
<p><img class="aligncenter size-full wp-image-52" title="DoctrineInstallStructure" src="http://marcelmarnix.com/wordpress/wp-content/uploads/2009/12/DoctrineInstallStructure1.png" alt="DoctrineInstallStructure" width="233" height="293" /></p>
<ul>
<li>Maak het plugin bestand: <strong>application/plugins/doctrine_pi.php</strong></li>
</ul>
<pre class="brush: php;">&lt;?php
// system/application/plugins/doctrine_pi.php

// laad Doctrine bibliotheek
require_once APPPATH.'/plugins/doctrine/lib/Doctrine.php';

// laad database configuratie uit CodeIgniter
require_once APPPATH.'/config/database.php';

// hier worden de Doctrine Model classes automatisch geladen
spl_autoload_register(array('Doctrine', 'autoload'));

// We laden onze database connecties in Doctrine_Manager
// Met deze lus kunnen we later meerdere connecties hebben
foreach ($db as $connection_name =&gt; $db_values) {

 // Eerst moeten we converteren naar het DSN formaat
 $dsn = $db[$connection_name]['dbdriver'] .
 '://' . $db[$connection_name]['username'] .
 ':' . $db[$connection_name]['password'].
 '@' . $db[$connection_name]['hostname'] .
 '/' . $db[$connection_name]['database'];

 Doctrine_Manager::connection($dsn,$connection_name);
}

// CodeIgniter's Model classe moet geladen worden
require_once BASEPATH.'/libraries/Model.php';

//Vertrl Doctrine waar onze models staan
Doctrine::loadModels(APPPATH.'/models');

// (OPTIONAL) CONFIGURATION BELOW

// Hierdoor kunnen we &quot;mutators&quot; gebruiken
Doctrine_Manager::getInstance()-&gt;setAttribute(
 Doctrine::ATTR_AUTO_ACCESSOR_OVERRIDE, true);

// Dit zet standaard alle tabel kolommen op &quot;notnull&quot; en &quot;unsigned&quot; (voor ints)
Doctrine_Manager::getInstance()-&gt;setAttribute(
 Doctrine::ATTR_DEFAULT_COLUMN_OPTIONS,
 array('notnull' =&gt; true, 'unsigned' =&gt; true));

//Noem de standaard primaire sleutel  'id', integer, 4 bytes
Doctrine_Manager::getInstance()-&gt;setAttribute(
 Doctrine::ATTR_DEFAULT_IDENTIFIER_OPTIONS,
 array('name' =&gt; 'id', 'type' =&gt; 'integer', 'length' =&gt; 4)); </pre>
<p>Probeer het commentaar in de code te lezen ( later begrijp je het beter).</p>
<h3>Database Setup en Configuratie</h3>
<ul>
<li>Open <strong>phpMyAdmin</strong>: <a onclick="javascript:pageTracker._trackPageview('/outbound/article/localhost');" rel="nofollow" href="http://localhost/phpmyadmin/">http://localhost/phpmyadmin/</a></li>
<li>Maak een <strong>database</strong> en noem deze “ci_doctrine”</li>
</ul>
<p><img title="ci_doctrine_day1_6" src="http://www.phpandstuff.com/wp-content/uploads/2009/10/ci_doctrine_day1_6.png" alt="ci_doctrine_day1_6" width="553" height="400" /></p>
<ul>
<li>Wijzig Bestand:  application/config/database.php</li>
<li>Zoek onderstaande zinnen en voer de waarden in.</li>
</ul>
<pre class="brush: php;"> // in application/config/database.php
// ...

$db['default']['hostname'] = &quot;localhost&quot;;
$db['default']['username'] = &quot;root&quot;;
$db['default']['password'] = &quot;&quot;; //Of een eigen wachtwoord wanneer de database goed beveiligd is
$db['default']['database'] = &quot;ci_doctrine&quot;;

// ...</pre>
<p>We hebben net het <strong>database configuratie bestand van </strong>CodeIgniter aangepast.</p>
<h3>Nog meer Configureren&#8230;</h3>
<h4>config.php</h4>
<ul>
<li>Wijzig bestand: <strong>application/config/config.php</strong></li>
</ul>
<pre class="brush: php;">// in application/config/config.php
// ...

$config['base_url']    = &quot;http://localhost/ci_doctrine/&quot;;

// ...</pre>
<p>Nu weet Codeigniter de URL van onze site.</p>
<h4>autoload.php</h4>
<ul>
<li>Wijzig bestand: <strong>application/config/autoload.php</strong></li>
</ul>
<pre class="brush: php;">// in application/config/autoload.php
// ...

$autoload['plugin'] = array('doctrine');

// ... </pre>
<p>Deze code zorgt ervoor dat de Doctrine plug-in altijd wordt geladen.</p>
<h4>Klaar!</h4>
<p>Nu kunnen we met het echte werk beginnen. Laten we met de setup starten.</p>
<h3>Ons Eerste Doctrine Model</h3>
<h4>Maak de user Tabel</h4>
<ul>
<li>Open phpMyAdmin: <a onclick="javascript:pageTracker._trackPageview('/outbound/article/localhost');" rel="nofollow" href="http://localhost/phpmyadmin/">http://localhost/phpmyadmin/</a></li>
<li>Ga naar database “ci_doctrine”</li>
<li>Maak een tabel “user” met de volgende kolommen:<br />
id =&gt; int, primary key, auto_increment,<br />
username =&gt; varchar(255), unique,<br />
password =&gt; varchar(255),<br />
first_name =&gt; varchar(255),<br />
last_name =&gt; varchar(255)</li>
</ul>
<p>De onderstaande <strong>query </strong>kan in de SQL veld van PHPMyadmin worden geplakt:</p>
<pre>CREATE TABLE `ci_doctrine`.`user` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR( 255 ) NOT NULL ,
`password` VARCHAR( 255 ) NOT NULL ,
`first_name` VARCHAR( 255 ) NOT NULL ,
`last_name` VARCHAR( 255 ) NOT NULL ,
UNIQUE (
`username`
)
)</pre>
<p><img title="ci_doctrine_day1_7" src="http://www.phpandstuff.com/wp-content/uploads/2009/10/ci_doctrine_day1_7.png" alt="ci_doctrine_day1_7" width="552" height="481" /></p>
<h4>Maak het Model</h4>
<ul>
<li>Maak bestand: <strong>application/models/user.php</strong></li>
</ul>
<pre class="brush: php;">&lt;?php
// system/application/models/user.php
class User extends Doctrine_Record {

 public function setTableDefinition() {
 $this-&gt;hasColumn('username', 'string', 255);
 $this-&gt;hasColumn('password', 'string', 255);
 $this-&gt;hasColumn('first_name', 'string', 255);
 $this-&gt;hasColumn('last_name', 'string', 255);
 }

}</pre>
<p><strong>Let op!:</strong></p>
<ul>
<li>We extenden <strong>Doctrine_Record</strong>, i.p.v. <strong>Model</strong> (Normaal gebruik je de CodeIgniter models).</li>
<li>Binnen de setTableDefinition() moeten we de tabel structuur definiëren.</li>
<li>Standaard kijkt Doctrine naar een tabel met dezelfde naam, in dit geval: “user”. (Deze kan veranderd worden)</li>
<li>In ons doctrine_pi.php hierboven, hebben we al een standaard primaire “id” sleutel aangemaakt. Hierdoor hoeven we deze niet in onze User classe te plaatsen.</li>
</ul>
<h4>Test het Model: Voeg wat gebruikers (Users) toe</h4>
<ul>
<li>Pas onze controller welke we eerder gemaakt hebben aan: <strong>application/controllers/hallo.php</strong></li>
</ul>
<pre class="brush: php;">&lt;?php
// system/application/controllers/hallo.php

class Hallo extends Controller {

 function world() {
   echo &quot;Hallo CodeIgniter!&quot;;
 }

 function user_test() {

   $u = new User;
   $u-&gt;username = 'johndoe';
   $u-&gt;password = 'secret';
   $u-&gt;first_name = 'John';
   $u-&gt;last_name = 'Doe';
   $u-&gt;save();

   $u2 = new User;
   $u2-&gt;username = 'phprocks';
   $u2-&gt;password = 'mypass';
   $u2-&gt;first_name = 'Codeigniter';
   $u2-&gt;last_name = 'Doctrine';
   $u2-&gt;save();

   echo &quot;2 Gebruikers toegevoegd&quot;;
 }

}</pre>
<p>We hebben net 2 objecten aangemaakt en met gegevens voorzien. Wanneer <strong>save()</strong> wordt aangeroepen worden de gegevens opgeslagen in de database.</p>
<p><strong>Let op!:</strong></p>
<ul>
<li>We kunnen de velden als <strong>parameters</strong> benaderen (bijv. $u-&gt;username), ook al hebben we ze niet aangemaakt als classe parameters. Is Doctrine niet mooi?</li>
<li>Wanneer je bekend bent met CodeIgniter, moet de $this-&gt;load-&gt;model() function angeroepen worden om de modellen te laden. Maar nu we de <strong>autoload</strong> functie van Doctrine hebben geregistreerd, hoeven we  alleen maar te zeggen: “new User;”</li>
<li>We hebben de “save()” functie niet gemaakt, omdat deze uit de Doctrine_Record classe komt welke we extenden. Het slaat het object in de database op. Verder in deze lessen komen er nog veel meer leuke funties en handigheidjes in de Doctrine classen.</li>
</ul>
<ul>
<li>Open: <a onclick="javascript:pageTracker._trackPageview('/outbound/article/localhost');" href="http://localhost/ci_doctrine/index.php/hallo/user_test">http://localhost/ci_doctrine/index.php/hallo/user_test</a></li>
</ul>
<p>Onderstaande zou moeten verschijnen:</p>
<pre>
<pre>2 Gebruikers toegevoegd</pre>
</pre>
<ul>
<li>Ga nu terug naar: <a onclick="javascript:pageTracker._trackPageview('/outbound/article/localhost');" rel="nofollow" href="http://localhost/phpmyadmin/">http://localhost/phpmyadmin/</a></li>
<li>Verken de tabel ‘user’</li>
</ul>
<p><strong>Voila!</strong> Nu zouden 2 twee records zichtbaar moeten zijn welke we hebben aangemaakt.</p>
<p><img title="ci_doctrine_day1_8" src="http://www.phpandstuff.com/wp-content/uploads/2009/10/ci_doctrine_day1_8.png" alt="ci_doctrine_day1_8" width="530" height="405" /></p>
<h3>Samengevat&#8230;</h3>
<p>We hebben <strong>CodeIgniter </strong>met <strong>Doctrine geïnstalleerd</strong>. Het duurde even voor het werkte,<br />
maar nu hebben we een <strong>MVC framework </strong>en <strong>ORM</strong> <strong>combinatie</strong>.</p>
<p>In de volgende lessen, zal ik nuttigere voorbeelden  en uiteindelijk een  een functionele website bouwen.<br />
Met Doctrine kunnen heel makkelijk <strong>modellen </strong>gemaakt worden welke <strong>tijd besparen</strong> waardoor we niet steeds opnieuw <strong>CRUD</strong> (Create, read, update and delete) functies hoeven te schrijven in al onze modellen.</p>
<p>Doctrine helpt ook met het afhandelen van relaties tussen onze klassen, en kunnen we complexe logische code en query&#8217;s ontlopen.</p>
<p>Tot de volgende keer!</p>
 <div class='series_links'> <a href='http://marcelmarnix.com/wordpress/tutorials/codeigniter/codeigniter-met-doctrine-deel-2-de-basis' title='Deel 2 Codeigniter met Doctrine de Basis'>Volgende in de serie</a></div>]]></content:encoded>
			<wfw:commentRss>http://marcelmarnix.com/wordpress/tutorials/codeigniter/deel1-codeigniter-en-doctrine-installeren/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

