<?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>Basmati Tree &#187; CodeIgniter</title>
	<atom:link href="http://www.basmatitree.net/tag/codeigniter/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.basmatitree.net</link>
	<description>nerdish recipes for a better tomorrow</description>
	<lastBuildDate>Tue, 19 May 2009 09:31:39 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Primi passi con CodeIgniter (parte 3)</title>
		<link>http://www.basmatitree.net/2008/10/14/primi-passi-con-codeigniter-3/</link>
		<comments>http://www.basmatitree.net/2008/10/14/primi-passi-con-codeigniter-3/#comments</comments>
		<pubDate>Tue, 14 Oct 2008 09:33:44 +0000</pubDate>
		<dc:creator>Palicao</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[framework]]></category>

		<guid isPermaLink="false">http://www.basmatitree.net/?p=17</guid>
		<description><![CDATA[Il Model è la parte dell&#8217;applicazione che si occupa di gestire i dati; nella maggior parte dei casi si tratta di dati che vengono salvati su database. Il controller farà uso dei metodi disponibili nella classe model per ricevere i dati di cui ha bisogno.
Nella nostra applicazione di gestione di magazzino, possiamo immaginare di avere [...]]]></description>
			<content:encoded><![CDATA[<p>Il Model è la parte dell&#8217;applicazione che si occupa di gestire i dati; nella maggior parte dei casi si tratta di dati che vengono salvati su database. Il controller farà uso dei metodi disponibili nella classe model per ricevere i dati di cui ha bisogno.</p>
<p>Nella nostra applicazione di gestione di magazzino, possiamo immaginare di avere una tabella che cataloghi tutto il contenuto del magazzino. La tabella, molto semplicemente potrebbe essere:</p>
<pre>CREATE TABLE `oggetti` (
`id` int(11) NOT NULL auto_increment,
`nome` varchar(50) collate utf8_unicode_ci NOT NULL,
`scaffale` int(11) NOT NULL,
`quantita` int(11) NOT NULL,
UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;</pre>
<p>Il modello corrispondente, quindi, potrebbe essere:</p>
<pre>class Oggetti extends Model {
  var $nome;
  var $scaffale;
  var $quantita;

  function Oggetti () {
    parent::Model();
  }

  function mostra_tutti () {
    // estrae tutti gli elementi dal database
  }

  function mostra_scaffale ($id_scaffale) {
    // estrae gli elementi filtrandoli per scaffale
  }

  // più i soliti metodi crea, modifica, cancella,...
  function crea ($nome, $scaffale, $quantita) { }
  function modifica ($id, $nome, $scaffale, $quantita) { }
  function cancella ($id) { }
}</pre>
<p>Quindi in buona sostanza una classe che implementi i classici metodi <a href="http://it.wikipedia.org/wiki/Tavola_CRUD" target="_blank">CRUD</a> più altri metodi d&#8217;utilità.</p>
<p>Per interrogare il DB, CodeIgniter fornisce una versione del pattern <a title="Active Record su Wikipedia" href="http://en.wikipedia.org/wiki/Active_record_pattern" target="_blank">Active Record</a> che semplifica la creazione di query e ci permette di scrivere codice indipendente dal tipo di database usato (attualmente i driver disponibili sono mssql, mysql, mysqli, oci8, odbc, postgres e sqlite).</p>
<p>La classe ActiveRecord fornisce metodi per la selezione, la modifica, l&#8217;inserimento e la cancellazione di dati. Inoltre sono supportate le funzioni più comuni (sum, avg&#8230;), le join, le transazioni e molto altro.</p>
<p>A questo punto possiamo entrare più nel dettaglio delle nostre funzioni e fare qualche esempio pratico:</p>
<pre>  function mostra_tutti () {
    $out = array();
    $this-&gt;db-&gt;select('nome, scaffale, quantita');
    $this-&gt;db-&gt;order_by('nome');
    $query = $this-&gt;db-&gt;get('oggetti');
    foreach ($query-&gt;result() as $row) {
      $out[] = $row;
    }
    return $out;
  }</pre>
<p>Per semplificare la sintassi è anche possibile utilizzare il chaining dei metodi:</p>
<pre>$query = $this-&gt;db-&gt;select('nome, scaffale, quantita')
              -&gt;order_by('nome')
              -&gt;get('oggetti');</pre>
<p>Per quanto riguarda la modifica e l&#8217;inserimento invece basta passare ai metodi insert() e update() un oggetto o un array di valori. In questo caso passeremo l&#8217;oggetto $this, ma potremmo anche creare un array od un oggetto ad hoc.</p>
<pre>  function crea ($nome, $scaffale, $quantita) {
    $this-&gt;nome = $nome;
    $this-&gt;scaffale = $scaffale;
    $this-&gt;quantita = $quantita;
    $this-&gt;db-&gt;insert('oggetti', $this);
  }</pre>
<pre>
<pre> function modifica ($id, $nome, $scaffale, $quantita) {
    $this-&gt;nome = $nome;
    $this-&gt;scaffale = $scaffale;
    $this-&gt;quantita = $quantita;
    $this-&gt;db-&gt;where('id', $id);
    $this-&gt;db-&gt;update('oggetti', $this);
  }</pre>
</pre>
<p>Molto semplicemente la cancellazione sarà:</p>
<pre>  function cancella ($id) {
    $this-&gt;db-&gt;where('id', $id);
    $this-&gt;db-&gt;delete('oggetti');
  }</pre>
<p>Rimando come al solito alla guida per un ulteriore approfondimento della classe <a title="The Database Class" href="http://codeigniter.com/user_guide/database/index.html" target="_blank">Database</a> e dell&#8217;<a title="ActiveRecord" href="http://codeigniter.com/user_guide/database/active_record.html" target="_blank">ActiveRecord</a>. Inoltre consiglio di dare anche un&#8217;occhiata al meccanismo di <a title="Database Caching Class" href="http://codeigniter.com/user_guide/database/caching.html" target="_blank">Caching</a> di CodeIgniter che può alleggerire di molto il carico sul database.</p>
<p>A questo punto siamo pronti per il lato di presentazione della nostra applicazione: la view, che affronterò nella prossima lezione.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.basmatitree.net/2008/10/14/primi-passi-con-codeigniter-3/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Primi passi con CodeIgniter (parte 2)</title>
		<link>http://www.basmatitree.net/2008/07/20/primi-passi-con-codeigniter-2/</link>
		<comments>http://www.basmatitree.net/2008/07/20/primi-passi-con-codeigniter-2/#comments</comments>
		<pubDate>Sun, 20 Jul 2008 19:50:51 +0000</pubDate>
		<dc:creator>Palicao</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[framework]]></category>

		<guid isPermaLink="false">http://www.basmatitree.net/?p=16</guid>
		<description><![CDATA[Il manuale di CodeIgniter definisce il controller così:
A Controller is simply a class file that is named in a way that can be associated with a URI.
In realtà il controller nel paradigma MVC è quello che si occupa di gestire l&#8217;input e l&#8217;output dell&#8217;utente creando una sorta di &#8220;ponte&#8221; tra model e view. In effetti [...]]]></description>
			<content:encoded><![CDATA[<p>Il manuale di CodeIgniter definisce il controller così:</p>
<p><dfn>A Controller is simply a class file that is named in a way that can be associated with a URI.</dfn></p>
<p>In realtà il controller nel paradigma MVC è quello che si occupa di gestire l&#8217;input e l&#8217;output dell&#8217;utente creando una sorta di &#8220;ponte&#8221; tra model e view. In effetti il controller in CodeIgniter è entrambe queste cose.</p>
<p>Immaginiamo di dover scrivere un&#8217;applicazione per la gesitione di un magazzino. Scriveremo allora una classe controller chiamata Magazzino simile a questa:</p>
<pre>class Magazzino extends Controller {
  function elenco() {
    // elenca tutto il contenuto del magazzino
  }

  function scaffale($codice_scaffale) {
    // elenca il contenuto di un determinato scaffale del magazzino
  }
}</pre>
<p>Salvando questa classe nella cartella system/application/controller/magazzino.php automaticamente CodeIgniter renderà disponibile l&#8217;output dei due metodi che abbiamo scritto rispettivamente agli indirizzi: <strong>misito.com/index.php/magazzino/elenco</strong> e <strong>miosito.com/index.php/magazzino/scaffale/a12</strong>.</p>
<p>In particolare nel secondo caso passerà alla funzione scaffale il codice scaffale &#8216;a12&#8242;.</p>
<p>Ovviamente si possono passare più parametri alle funzioni che ne hanno bisogno continuando ad aggiungerli separati da <strong>/</strong>. Si può anche migliorare la leggibilità degli indirizzi rimuovendo &#8220;index.php&#8221; con un htaccess simile a:</p>
<pre>RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]</pre>
<p>Ma non basta, perchè CodeIgniter ci permette anche di organizzare i controller in cartelle e sottocartelle o di definire nuove regole di &#8220;routing&#8221; aggiungendo regole al file system/application/config/routes.php.</p>
<p>Per queste ed altre funzioni avanzate, rimando alla guida ufficiale di CodeIgniter, in particolare alla pagina <a title="Controllers, CodeIgniter User Guide" href="http://codeigniter.com/user_guide/general/controllers.html" target="_blank">Controllers</a> e <a title="URI Routing, Toggle Table of Contents CodeIgniter User Guide" href="http://codeigniter.com/user_guide/general/routing.html" target="_blank">URI Routing</a>.</p>
<p>Alla prossima lezione, in cui parleremo del Model.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.basmatitree.net/2008/07/20/primi-passi-con-codeigniter-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Primi passi con CodeIgniter (parte 1)</title>
		<link>http://www.basmatitree.net/2008/07/20/primi-passi-con-codeigniter-1/</link>
		<comments>http://www.basmatitree.net/2008/07/20/primi-passi-con-codeigniter-1/#comments</comments>
		<pubDate>Sun, 20 Jul 2008 08:42:40 +0000</pubDate>
		<dc:creator>Palicao</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[framework]]></category>

		<guid isPermaLink="false">http://www.basmatitree.net/?p=14</guid>
		<description><![CDATA[Dopo aver usato per molto tempo il mio &#8220;Cesare&#8220;, ho deciso che era ora di cambiare aria, e di provare una soluzione che mi consentisse di lavorare anche in gruppo con altri sviluppatori.
Ho dato un&#8217;occhiata ai framework più usati ultimamente e ovviamente sono rimasto affascinato da CakePHP. L&#8217;uso del pattern MVC e della filosofia &#8220;convention [...]]]></description>
			<content:encoded><![CDATA[<p>Dopo aver usato per molto tempo il mio &#8220;<a title="Cesare PHP framework" href="http://code.google.com/p/cesare/" target="_blank">Cesare</a>&#8220;, ho deciso che era ora di cambiare aria, e di provare una soluzione che mi consentisse di lavorare anche in gruppo con altri sviluppatori.</p>
<p>Ho dato un&#8217;occhiata ai framework più usati ultimamente e ovviamente sono rimasto affascinato da <a title="CakePHP" href="http://www.cakephp.org/" target="_blank">CakePHP</a>. L&#8217;uso del pattern MVC e della filosofia &#8220;convention over configuration&#8221; mi sembravano molto interessanti. Dopo averlo usato un pò, proprio a causa di quest&#8217;ultima scelta, ho deciso di cambiare strada e di provare qualcosa che promettesse di meno dal punto di vista di rapidità di sviluppo, ma che mi permettesse qualche libertà in più.</p>
<p>E così sono approdato a <a title="CodeIgniter" href="http://codeigniter.com/" target="_blank">CodeIgniter</a>, anche questo un ottimo esempio di implementazione del paradigma MVC, ma in più molto più libero da convenzioni di Cake. In più è semplicissimo da utilizzare (la curva di apprendimento di Cake è molto più ripida), è leggero (anche in termini di kB), funziona anche con PHP4.</p>
<p>Per iniziare a lavorare con CI, è sufficiente:</p>
<ol>
<li><a title="Download CodeIgniter" href="http://codeigniter.com/download.php" target="_blank">scaricarlo</a></li>
<li>estrarre i contenuti del file zippato sulla root o in una cartella del proprio server</li>
<li>modificare i file di configurazione che si trovano nella cartella system/application/config e in particolare config.php (la variabile $config['base_url']) e database.php (per la connessione al DB)</li>
</ol>
<p>A questo punto tutto è pronto per scrivere il primo controller, argomento che afferonterò nella prossima lezione!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.basmatitree.net/2008/07/20/primi-passi-con-codeigniter-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
