<?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>PHPBlog.it &#187; mvc</title>
	<atom:link href="http://phpblog.it/tag/mvc/feed/" rel="self" type="application/rss+xml" />
	<link>http://phpblog.it</link>
	<description>Solo un altro blog targato WordPress</description>
	<lastBuildDate>Mon, 30 Jan 2012 10:36:04 +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>Approccio a Zend Framework</title>
		<link>http://phpblog.it/2008/10/22/approccio-a-zend-framework/</link>
		<comments>http://phpblog.it/2008/10/22/approccio-a-zend-framework/#comments</comments>
		<pubDate>Wed, 22 Oct 2008 05:00:20 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[dalla rete]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[coding standard]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[zend framework]]></category>

		<guid isPermaLink="false">http://phpblog.it/2008/10/22/approccio-a-zend-framework/</guid>
		<description><![CDATA[Robert Basic, un web developer freelance, ha da poco iniziato ad utilizzare Zend Framework per i propri progetti in PHP e trovandolo un prodotto adatto alle sue esigenze ha deciso di realizzare una breve introduzione panoramica al framework. Robert parla del pattern MVC, del coding standard proposto da ZF e di quanto sia utile aderire [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://robertbasic.com/" title="Robert Basic">Robert Basic</a>, un web developer freelance, ha da poco iniziato ad utilizzare <a href="http://framework.zend.com/" title="Zend Framework"><strong>Zend Framework</strong></a> per i propri progetti in PHP e trovandolo un prodotto adatto alle sue esigenze ha deciso di realizzare <a href="http://robertbasic.com/blog/2008/10/07/starting-with-zend-framework/" title="una breve introduzione panoramica al framework">una breve introduzione panoramica al framework</a>. Robert parla del pattern MVC, del coding standard proposto da ZF e di quanto sia utile aderire ad uno standard, inoltre analizza alcuni termini base e la struttura dei file dietro ad un&#8217;applicazione sviluppata con ZF.</p>
<p>Dovrebbero seguire altre puntate per completare il discorso, quindi se siete interessati aggiungetelo ai segnalibri.</p>
]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2008/10/22/approccio-a-zend-framework/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>L&#8217;architettura di symfony 1.1</title>
		<link>http://phpblog.it/2008/06/26/larchitettura-di-symfony-11/</link>
		<comments>http://phpblog.it/2008/06/26/larchitettura-di-symfony-11/#comments</comments>
		<pubDate>Thu, 26 Jun 2008 05:00:28 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[dalla rete]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[platform]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://phpblog.it/2008/06/26/larchitettura-di-symfony-11/</guid>
		<description><![CDATA[Fabien Potencier parla ancora attraverso il blog di symfony per anticipare l&#8217;architettura di simfony 1.1 ormai prossima al rilascio. Prima però vuole spendere alcune parole parlando di symfony platform e di symfony framework che basato sul platform introduce un ulteriore layer contenente l&#8217;MVC e la connessione con lo strato inferiore. Di sicuro interesse le rappresentazioni [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://172.18.0.13/wordpress/wp-content/uploads/2008/06/symfony.jpg" alt="Symfony" />Fabien Potencier parla ancora attraverso il <a href="http://www.symfony-project.org/blog/2008/06/23/the-symfony-1-1-architecture" title="blog di symfony per anticipare l'architettura di simfony 1.1">blog di symfony per anticipare l&#8217;<strong>architettura di simfony 1.1</strong></a> ormai prossima al rilascio. Prima però vuole spendere alcune parole parlando di <strong>symfony platform</strong> e di <strong>symfony framework</strong> che basato sul platform introduce un ulteriore layer contenente l&#8217;MVC e la connessione con lo strato inferiore. Di sicuro interesse le rappresentazioni grafiche che permettono di visualizzare in modo semplice la reale struttura del progetto apprezzandone la vastità. Buona lettura!</p>
]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2008/06/26/larchitettura-di-symfony-11/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Database con symfony: il file schema.yml</title>
		<link>http://phpblog.it/2008/04/30/database-con-symfony-il-file-schemayml/</link>
		<comments>http://phpblog.it/2008/04/30/database-con-symfony-il-file-schemayml/#comments</comments>
		<pubDate>Wed, 30 Apr 2008 06:00:42 +0000</pubDate>
		<dc:creator>Davide Borsatto</dc:creator>
				<category><![CDATA[framework]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[YAML]]></category>

		<guid isPermaLink="false">http://php5blog.it/2008/04/30/database-con-symfony-il-file-schemayml/</guid>
		<description><![CDATA[Continuiamo la serie di nostri post riguardo symfony, parlando oggi di un particolare file importante in qualunque applicazione di un livello non elementare (per la quale symfony sarebbe quindi eccessivo), necessitante in particolare di database. symfony utilizza come ORM (Object Relational Mapper) Propel, il quale si appoggia a sua volta sull&#8217;abstraction layer Creole. Propel per [...]]]></description>
			<content:encoded><![CDATA[<p>Continuiamo la serie di nostri post riguardo symfony, parlando oggi di un particolare file importante in qualunque applicazione di un livello non elementare (per la quale symfony sarebbe quindi eccessivo), necessitante in particolare di database.</p>
<p><span id="more-102"></span></p>
<p>symfony utilizza come <a href="http://en.wikipedia.org/wiki/Object-relational_mapping">ORM</a> (Object Relational Mapper) <a href="http://propel.phpdb.org/trac/">Propel</a>, il quale si appoggia a sua volta sull&#8217;abstraction layer <a href="http://creole.phpdb.org/trac/">Creole</a>. Propel per funzionare correttamente ha bisogno di avere una completa descrizione delle tabelle del database. A questo è adibito il file schema.yml dentro alla directory config. Vediamone uno di esempio, contenente la descrizione delle tabelle di un database di un blog.</p>
<pre>
propel:
  weblog_post:
    _attributes: { phpName: Post }
    id:
    title:       varchar(255)
    excerpt:     longvarchar
    body:        longvarchar
    created_at:
  weblog_comment:
    _attributes: { phpName: Comment }
    id:
    post_id:
    author:      varchar(255)
    email:       varchar(255)
    body:        longvarchar
    created_at:</pre>
<p>Ecco, è relativamente semplice. Innanzitutto questa configurazione è fatta utilizzando <a href="http://www.yaml.org/start.html">YAML</a>, un linguaggio di markup che al contrario di XML è più coinciso e sbrigativo. Per ulteriori informazioni consultate il sito ufficiale.</p>
<p>Entriamo ora nei particolari del file; prima di tutto vediamo che come elemento padre c&#8217;è &#8220;propel:&#8221;. Questo è un elemento necessario, e non può essere omesso. Dopo di questo, ogni elemento figlio sarà una tabella del database, col suo vero nome all&#8217;interno del DBMS (in questo caso weblog_post e weblog_comment). In seguito il campo particolare &#8220;_attributes&#8221; definirà alcuni parametri, come il più importante phpName, ovvero il nome che avrà la nostra classe in PHP.</p>
<p>Essendo un argomento troppo vasto da trattare in un singolo post, vi linko ora delle fonti dove trovare dei suggerimenti per la scrittura del vostro file schema.yml</p>
<ul>
<li><a href="http://andreiabohner.files.wordpress.com/2007/09/sfmodelsecondpartrefcard.pdf">CheatSheet</a></li>
<li><a href="http://www.symfony-project.org/book/1_0/08-Inside-the-Model-Layer#Symfony's%20Database%20Schema">Pagina del symfony book</a></li>
<li><a href="http://www.symfony-project.org/blog//2006/07/05/meet-schema-yml">Meet Schema.yml</a></li>
</ul>
<p>Il prossimo post parlerà degli ultimi dettagli di base per conoscere symfony, e poi partiremo con la realizzazione di un piccolo forum con questo ottimo framework. Alla prossima!</p>
]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2008/04/30/database-con-symfony-il-file-schemayml/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>La logica di symfony</title>
		<link>http://phpblog.it/2008/04/28/la-logica-di-symfony/</link>
		<comments>http://phpblog.it/2008/04/28/la-logica-di-symfony/#comments</comments>
		<pubDate>Mon, 28 Apr 2008 06:00:43 +0000</pubDate>
		<dc:creator>Davide Borsatto</dc:creator>
				<category><![CDATA[framework]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://php5blog.it/2008/04/28/la-logica-di-symfony/</guid>
		<description><![CDATA[symfony è sviluppato per avere una struttura logica semplice ma ottimale in ogni caso. La struttura di un sito realizzato con symfony è la seguente: progetto: è il sito stesso. applicazione: nel classico esempio dell&#8217;applicazione frontend e quella backend. modulo: un modulo racchiude azioni che hanno qualcosa in comune. Ad esempio un modulo utente gestirà [...]]]></description>
			<content:encoded><![CDATA[<p>symfony è sviluppato per avere una struttura logica semplice ma ottimale in ogni caso.</p>
<p><span id="more-99"></span><br />
La struttura di un sito realizzato con symfony è la seguente:</p>
<ul>
<li>progetto: è il sito stesso.</li>
<li>applicazione: nel classico esempio dell&#8217;applicazione frontend e quella backend.</li>
<li>modulo: un modulo racchiude azioni che hanno qualcosa in comune. Ad esempio un modulo utente gestirà tutte gli aspetti riguardanti gli utenti</li>
<li>azione: la parte più piccola. Nel caso del modulo utente, le azioni saranno per esempio visualizzaDati, modificaPassword, effettuaLogin ecc.</li>
</ul>
<p>Per creare il filesystem necessario allo sviluppo, <a href="http://php5blog.it/2008/04/23/primi-passi-con-symfony/">abbiamo già detto</a> di aver bisogno della riga di comando. Vediamo come si creerebbe la struttura dell&#8217;esempio precedente utilizzando il comando symfony.<br />
<code><br />
symfony init-project nomesito<br />
symfony init-app frontend<br />
symfony init-app backend<br />
symfony init-module frontend utente</code></p>
<p>Con questi comandi creiamo il progetto &#8220;nomesito&#8221;, le applicazione frontend e backend, ed il modulo utente appartenente all&#8217;applicazione frontend.<br />
Vorrei sottolineare il fatto che alla prima applicazione creata verrà associata anche la pagina index.php, ovvero sarà il punto d&#8217;ingresso del nostro sito. Sarà possibile ovviamente cambiare questa scelta in seguito, ma è preferibile già da ora fare la nostra decisione.</p>
<p>Queste sono proprio le basi per la creazione delle vostre applicazioni in symony. Per ulteriori informazioni potete consultare <a href="http://www.symfony-project.org/book/1_0/">l&#8217;ottima documentazione ufficiale</a>.</p>
<p>Ora invece passiamo al codice vero e proprio. Nella cartella apps inizialmente vuota ora vi saranno due directory chiamate frontend e backend. Entriamo in quella frontend, scegliamo modules, utente, ed infine actions. Da qui apriamo il file actions.class.php.</p>
<p>Come potete vedere è una classe che si presenta in questo modo:</p>
<pre>&lt;?php
/**
 * utente actions.
 *
 * @package    nomeprogetto
 * @subpackage utente
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 2692 2006-11-15 21:03:55Z fabien $
 */

class utenteActions extends sfActions
{
  /**
   * Executes index action
   *
   */
  public function executeIndex()
  {
    $this-&gt;forward('default', 'module');
  }
}</pre>
<p>Questa è una tipica classe di azioni. <em>executeIndex</em> è l&#8217;azione predefinita (a meno che non si specifichi un&#8217;altra tramite la configurazione). Ogni azione raggiungibile dal browser dev&#8217;essere preceduta da &#8220;<strong>execute</strong>&#8220;, e deve avere la prima lettera maiuscola, ad esempio &#8220;<em>executeLogin</em>&#8220;, &#8220;<em>executeVisualizzaDati</em>&#8220;, &#8220;<em>executeRegistrazione</em>&#8220;. Ora, supponendo che il vostro web server (presumibilmente apache) punti alla directory base del nostro progetto, per accedere tramite browser si dovrà utilizzare questo url:</p>
<p><code>http://localhost/web/fronted_dev.php/utente</code></p>
<p>In questo modo punteremo alla directory web, file frontend_dev.php (il nostro front controller), ed al modulo utente. Non essendo specificata l&#8217;azione, verrà eseguita quella predefinita, ovvere index.</p>
<p>Ora analizziamo questo:</p>
<p><code>$this-&gt;forward('default','module');</code></p>
<p>Con questo codice attiviamo una sorta di redirect, che senza far cambiare l&#8217;indirizzo al browser, esegue un modulo ed azione differenti. L&#8217;accoppiata default/module è quella predefinita, e mostra la pagina di benvenuto di symfony.<br />
Ora cancelliamo quella riga, e trasformiamola in</p>
<p><code>$this-&gt;messaggio = 'Hello, world!';</code></p>
<p>Ora apriamo il file &#8220;apps/frontend/modules/utente/templates/indexSuccess.php&#8221; e vi scriviamo dentro</p>
<p><code>&lt;?php echo $messaggio ?&gt;</code></p>
<p>Aggiorniamo la pagina del browser, ed ecco che come per magia abbiamo realizzato il nostro hello world in symfony!  Fin qui tutto semplice, dalla prossima inizieremo con qualcosa di più complesso. A presto!</p>
]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2008/04/28/la-logica-di-symfony/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Primi passi con symfony</title>
		<link>http://phpblog.it/2008/04/23/primi-passi-con-symfony/</link>
		<comments>http://phpblog.it/2008/04/23/primi-passi-con-symfony/#comments</comments>
		<pubDate>Wed, 23 Apr 2008 06:00:15 +0000</pubDate>
		<dc:creator>Davide Borsatto</dc:creator>
				<category><![CDATA[framework]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[YAML]]></category>

		<guid isPermaLink="false">http://php5blog.it/2008/04/23/primi-passi-con-symfony/</guid>
		<description><![CDATA[Come abbiamo già detto, symfony è un framework per lo sviluppo di applicazioni MVC per PHP5. Oggi iniziamo ad esplorare le capacità di questo strumento, andando ad imparare le basi per il suo utilizzo. Per utilizzare symfony ci sono due modi: uno prevede l&#8217;installazione del pacchetto apposito tramite pear, l&#8217;altro invece consente di scaricare un [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://php5blog.it/files/2008/04/symfony.jpg" alt="symfony" />Come <a href="http://php5blog.it/2008/04/21/introduzione-a-symfony/">abbiamo già detto</a>, symfony è un framework per lo sviluppo di applicazioni MVC per PHP5. Oggi iniziamo ad esplorare le capacità di questo strumento, andando ad imparare le basi per il suo utilizzo.</p>
<p><span id="more-96"></span></p>
<p>Per utilizzare symfony ci sono due modi: uno prevede l&#8217;installazione del pacchetto apposito tramite pear, l&#8217;altro invece consente di scaricare un file pronto all&#8217;uso chiamato <a href="http://www.symfony-project.org/get/sf_sandbox.tgz">sf_sandbox.tgz</a>, che ha già preconfigurati alcuni parametri (come l&#8217;utilizzo di sqlite invece di mysql). Personalmente preferisco la prima soluzione, ed è quella che andiamo a spiegare.</p>
<p>Come spiegato nella <a href="http://www.symfony-project.org/installation/1_0">pagina di download</a> di symfony, per installare il framework tramite pear, basta scrivere da riga di comando:</p>
<p><code>pear channel-discover http://pear.symfony-project.com</code></p>
<p>Seguito da</p>
<p><code>pear install symfony/symfony</code></p>
<p>Aspettate che pear scarichi il pacchetto, lo decomprima ed installi (tutto automatico), e tutta la potenza dell&#8217;ultima versione di symfony sarà nelle vostre mani!</p>
<p>Per poter utilizzare appieno questo strumento è consigliabile avere una certa dimestichezza con la riga di comando, che sia terminale o prompt o l&#8217;equivalente del vostro sistema operativo. Infatti per le operazioni di base viene utilizzato il comando &#8220;symfony&#8221;, ovvero un collegamento allo script che gestisce il framework. Sul mio PC, in Windows Vista è situato in</p>
<p><code>C:\Program Files\PHP\symfony</code></p>
<p>mentre in Ubuntu 7.10 è in</p>
<p><code>/usr/bin/symfony</code></p>
<p>Non essendo purtroppo utente Mac non posso dire dove si trova questo file. Per gli interessati posso solo consigliare di cercare in rete.</p>
<p>Il comando di base per generare la struttura di file e directory per un nuovo progetto è questo:</p>
<p><code>symfony init-project nomeprogetto</code></p>
<p>Questo creerà tutto il necessario per lavorare. Da sottolineare come questo comando non crea una directory &#8220;nomeprogetto&#8221; formata dalle sottodirectory, ma crea file e cartelle a partire dalla posizione attuale. Perciò è consigliabile, se non obbligatorio utilizzare questo comando in una directory vuota.</p>
<p>Andiamo ora a vedere cosa ha generato questa nostra azione:</p>
<pre>/
apps/
batch/
cache/
config/
  config.php
  databases.yml
  propel.ini
  properties.ini
  rsync_exclude.txt
  schema.yml
data/
  model/
  sql/
doc/
lib/
  model/
log/
plugins/
test/
  bootstrap/
    functional.php
    unit.php
  functional/
  unit/
web/
  css/
    main.css
  images/
  js/
  uploads/
    assets/
  .htaccess
  robots.txt
symfony</pre>
<p>Questo è symfony. La prossima volta andremo ad analizzare cosa significano le directory più importanti, ed inizieremo finalmente a vedere un pò di codice. Alla prossima!</p>
]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2008/04/23/primi-passi-con-symfony/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Introduzione a symfony</title>
		<link>http://phpblog.it/2008/04/21/introduzione-a-symfony/</link>
		<comments>http://phpblog.it/2008/04/21/introduzione-a-symfony/#comments</comments>
		<pubDate>Mon, 21 Apr 2008 06:00:28 +0000</pubDate>
		<dc:creator>Davide Borsatto</dc:creator>
				<category><![CDATA[framework]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[YAML]]></category>

		<guid isPermaLink="false">http://php5blog.it/2008/04/21/introduzione-a-symfony/</guid>
		<description><![CDATA[L&#8217;argomento del post di oggi è un framework a cui sono particolarmente &#8220;affezionato&#8220;: symfony. Symfony è un framework MVC sviluppato interamente ad oggetti in PHP5. Si basa su propel per la componente Model, su un sistema di classi personalizzato per la componente Controller, e su dei semplici template con PHP embedded per la parte View. [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://farm3.static.flickr.com/2180/2081030637_060d1f051b_o.gif" height="122" width="470" /></p>
<p>L&#8217;argomento del post di oggi è un framework a cui sono particolarmente &#8220;<a href="http://php5blog.it/index.php?s=symfony">affezionato</a>&#8220;: <a href="http://www.symfony-project.org">symfony</a>.</p>
<p><span id="more-92"></span></p>
<p>Symfony è un framework MVC sviluppato interamente ad oggetti in PHP5. Si basa su <strong>propel</strong> per la componente <em>Model</em>, su un sistema di classi personalizzato per la componente <em>Controller</em>, e su dei semplici template con PHP embedded per la parte <em>View</em>.<br />
La forza di questo framework sta nell&#8217;essere uno strumento &#8220;all-in-one&#8221;. Ovvero, a fronte di una leggera pesantezza del sistema, si hanno a disposizione strumenti molto potenti e completi. Inoltre è facilmente estendibile, facilitando la realizzazione di <a href="http://trac.symfony-project.com/wiki/SymfonyPlugins">plugin</a>.</p>
<p>Tra i suoi difetti, oltre alla già citata pesantezza, vi è una non troppo veloce esecuzione del codice, frutto della mole di dati e classi caricati in memoria ad ogni reload della pagina. Inoltre c&#8217;è una forse eccessiva prolissità della sintassi di Propel, ma in questo caso non è colpa di symfony in se. I suoi difetti (a mio parere) finiscono qui, e dall&#8217;altra parte troviamo molte ed interessanti caratteristiche:</p>
<ul>
<li>File di configurazione basati su <a href="http://www.yaml.org/start.html">YAML</a>, un linguaggio di definizione dati meno prolisso di XML ma altrettanto potente.</li>
<li>Comoda comandi da <strong>shell</strong>, per iniziare progetti, moduli, controller e quant&#8217;altro.</li>
<li>Pannello di amministrazione dati realizzato automaticamente a partire da un semplice file YAML.</li>
<li>Un sistema automatico di <strong>caching</strong> dell&#8217;applicazione.</li>
<li>Sfruttamento appieno della programmazione ad oggetti (ogni componente è un oggetto, le azioni sono metodi di oggetti..).</li>
<li>Strumenti per facilitare l&#8217;internazionalizzazione dei propri progetti.</li>
<li>Molto, molto altro.</li>
</ul>
<p>Non voglio che questa sembri una crociata in favore di questo framework piuttosto che di un altro. Dopo averlo provato, sono ora convinto delle sue grandi potenzialità, soprattutto in progetti di medie/grandi dimensioni.</p>
<p>Dietro questo progetto, vi è una web agency francese, la <a href="http://www.sensio.com/">Sensio</a>. Questo consente di avere un&#8217;ottima qualità del codice del framework, e garantisce un costante impegno su di esso. Inoltre, essendo un progetto open-source, ha dalla sua una folta comunità di sviluppatori volontari.</p>
<p>Nei prossimi giorni torneremo a parlarvi di questo framework, facendo degli esempi del suo utilizzo.</p>
<p>Voi utilizzate / vi piacerebbe utilizzare qualche framework? Cosa pensate al riguardo?</p>
]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2008/04/21/introduzione-a-symfony/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Un semplice ORM in PHP: introduzione</title>
		<link>http://phpblog.it/2008/03/18/un-semplice-orm-in-php-introduzione/</link>
		<comments>http://phpblog.it/2008/03/18/un-semplice-orm-in-php-introduzione/#comments</comments>
		<pubDate>Tue, 18 Mar 2008 06:00:27 +0000</pubDate>
		<dc:creator>Davide Borsatto</dc:creator>
				<category><![CDATA[phpblog]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[ORM]]></category>

		<guid isPermaLink="false">http://php5blog.it/2008/03/18/un-semplice-orm-in-php-introduzione/</guid>
		<description><![CDATA[Con oggi iniziamo un nuovo argomento, destinato a accompagnarci per un bel pò sulle pagine virtuali di questo blog: la realizzazione di un ORM (Object Relational Mapping) per PHP5. Scopo dell&#8217;articolo odierno è di fornire un&#8217;introduzione teorica all&#8217;argomento che affronteremo in questa serie di post. Prima di tutto, cosa si intende con ORM: Un ORM [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/deia/382637881/sizes/l/"><img src="http://farm1.static.flickr.com/146/382637881_0902bd880f.jpg" border="0" height="297" width="470" /></a></p>
<p>Con oggi iniziamo un nuovo argomento, destinato a accompagnarci per un bel pò sulle pagine virtuali di questo blog: la realizzazione di un <strong>ORM</strong> (<em>Object Relational Mapping</em>) per PHP5.</p>
<p><span id="more-66"></span>Scopo dell&#8217;articolo odierno è di fornire un&#8217;introduzione teorica all&#8217;argomento che affronteremo in questa serie di post.</p>
<p>Prima di tutto, cosa si intende con ORM: Un ORM è un componente che detto in maniera semplicistica fa da filtro tra il programma vero e proprio ed i dati del database. Si occupa della manipolazione delle tuple del DB, astraendo i comandi e evitando al programmatore di dover andare ad accedere direttamente ai dati. Se utilizzate un ORM in pratica vedrete spesso scritte come queste</p>
<p><code>$comment-&gt;getID();</code></p>
<p><code>$post-&gt;getAuthor()-&gt;getName();</code></p>
<p>e molto meno come queste</p>
<p><code>$result = mysql_query("select id from comments");</code></p>
<p><code>$result = mysql_query("select name from posts inner join authors on posts.author_id = author.id");</code></p>
<p>A me sembra più comodo e pratico, credo anche a voi.</p>
<p>L&#8217;immagine in cima al post (cliccateci per l&#8217;originale più grande e leggibile) spiega com&#8217;è implementato tutto ciò nel framework <a href="http://www.symfony-project.org">symfony</a>: Propel (un ottimo ORM, forse un pò prolisso nella sintassi) si appoggia su Creole (lo strato che fisicamente si collega al DB, fa le query ecc.) e rende trasparente l&#8217;accesso al database da parte del programmatore.</p>
<p>Per semplicità io includerò tutto in un unico componente, realizzato in classi e sfruttando le capacità di PHP5. Chiedo ai lettori di correggermi nel caso troviate degli errori (sono umano anch&#8217;io, e l&#8217;ORM lo realizzo man mano che scrivo gli articoli) e di darmi consigli, saranno tutti bene accetti.</p>
<p>Ho deciso che l&#8217;ORM utilizzerà solo MySQL, in quanto sinceramente ho poca esperienza con altri tipi di RDBMS, e essendo un prodotto &#8220;artigianale&#8221; non ha molto senso andare a sbattere la testa con problemi di scelta del gestore dati. Realizzerò il componente in modo tale sia più semplice possibile andare a sopperire a questa mancanza, magari aggiungendo un singolo file con le istruzioni necessarie.</p>
<p>Rimando alla <a href="http://it.wikipedia.org/wiki/Object-relational_mapping">voce</a> di wikipedia (o alla più completa <a href="http://en.wikipedia.org/wiki/Object-relational_mapping">versione</a> in inglese) per ulteriori delucidazioni sulla parte teorica.</p>
<p>Nel prossimo articolo (online presumibilmente tra pochi giorni) inizieremo a vedere la struttura vera e propria del componente, la gerarchia dei file e concluderemo la parte teorica.</p>
]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2008/03/18/un-semplice-orm-in-php-introduzione/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MVC: chi è costui?</title>
		<link>http://phpblog.it/2008/03/14/model-view-controller-design-pattern-mvc/</link>
		<comments>http://phpblog.it/2008/03/14/model-view-controller-design-pattern-mvc/#comments</comments>
		<pubDate>Fri, 14 Mar 2008 06:00:11 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[programmazione]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[design pattern]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[prado]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://php5blog.it/2008/03/14/model-view-controller-design-pattern-mvc/</guid>
		<description><![CDATA[Model-View-Controller (MVC, talvolta tradotto in italiano Modello-Vista-Controllore) è un pattern architetturale molto diffuso nello sviluppo di software object-oriented. A causa della crescente diffusione di tecnologie basate su MVC nel contesto di framework per applicazioni Web, l&#8217;espressione MVC sta entrando nell&#8217;uso anche per indicare specificatamente questa categoria di sistemi (che comprende per esempio Symfony, CakePHP e [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Model-View-Controller</strong> (<strong>MVC</strong>, talvolta tradotto in italiano <strong>Modello-Vista-Controllore</strong>) è un <a href="http://it.wikipedia.org/wiki/Design_pattern" title="Design pattern">pattern architetturale</a> molto diffuso nello sviluppo di software object-oriented. A causa della crescente diffusione di tecnologie basate su MVC nel contesto di framework<a href="http://it.wikipedia.org/wiki/Middleware" title="Middleware"></a> per <a href="http://it.wikipedia.org/wiki/Applicazione_Web" title="Applicazione Web">applicazioni Web</a>, l&#8217;espressione <strong>MVC</strong> sta entrando nell&#8217;uso anche per indicare specificatamente questa categoria di sistemi (che comprende per esempio <a href="http://www.symfony-project.org/" title="Symfony">Symfony</a>, <a href="http://www.cakephp.org/" title="CakePHP">CakePHP</a> e <a href="http://www.xisc.com/" title="Prado">Prado</a>).</p>
<p><span id="more-65"></span> Il design pattern MVC identifica 3 livelli all&#8217;interno dell&#8217;architettura di un&#8217;applicazione:</p>
<ul>
<li>il <strong>model</strong> rappresenta l&#8217;informazione che vogliamo rappresentare e su cui l&#8217;applicazione lavora, è quella che possiamo definire business logic</li>
<li>il <strong>view</strong> è come rappresentiamo il model e quindi l&#8217;informazione permettendo l&#8217;interazione da parte dell&#8217;utente</li>
<li>il <strong>controller</strong> è il motore vero e proprio dell&#8217;applicazione risponde alle azioni dell&#8217;utente tramite la vista e chiede i dati al model facendo da tramite tra i due layer</li>
</ul>
<p>L&#8217;architettura MVC separa quindi la business logic (model) e la sua presentazione (view), rendendo il codice molto più facile da mantere ed aggiornare. Tale metodologia di design delle applicazioni è rivolta principalmente a progetti di media e grande dimensione visto che richiede una minuziosa progettazione e pianificazione per essere realizzato.</p>
<p><strong>CONSIGLIATI:</strong><br />
<a href="http://www.onlamp.com/pub/a/php/2005/09/15/mvc_intro.html?page=1" title="Understanding MVC in PHP">Understanding MVC in PHP</a><br />
<a href="http://www.symfony-project.org/book/1_0/02-Exploring-Symfony-s-Code" title="The MVC Pattern">The MVC Pattern</a></p>
]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2008/03/14/model-view-controller-design-pattern-mvc/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>40 indizi per definirti uno scarso programmatore PHP</title>
		<link>http://phpblog.it/2008/02/14/40-indizi-per-definirti-uno-scarso-programmatore-php/</link>
		<comments>http://phpblog.it/2008/02/14/40-indizi-per-definirti-uno-scarso-programmatore-php/#comments</comments>
		<pubDate>Thu, 14 Feb 2008 06:00:58 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[dalla rete]]></category>
		<category><![CDATA[40 regole]]></category>
		<category><![CDATA[filtering]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[progettazione]]></category>

		<guid isPermaLink="false">http://php5blog.it/2008/02/14/40-indizi-per-definirti-uno-scarso-programmatore-php/</guid>
		<description><![CDATA[Leggo un&#8217;interessante lista di indizi dal blog di Reinhold Weber che secondo lui bastano a definire davvero scarso (schifoso sarebbe la traduzione esatta) un programmatore PHP. Si tratta di 40 &#8220;regole&#8221; di buona programmazione e progettazione che ci invitano a riflettere sul proprio modo di agire e sperano di scatenare qualche buon proposito per migliorarsi. [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://172.18.0.13/wordpress/wp-content/uploads/2008/02/helpcoder.jpg" alt="Help coder" /></p>
<p>Leggo un&#8217;interessante <a href="http://reinholdweber.com/?p=19" title="lista di indizi dal blog di Reinhold Weber">lista di indizi dal blog di Reinhold Weber</a> che secondo lui bastano a <strong>definire davvero scarso (schifoso sarebbe la traduzione esatta) un programmatore PHP</strong>. Si tratta di <strong>40 &#8220;regole&#8221;</strong> di buona programmazione e progettazione che ci invitano a riflettere sul proprio modo di agire e sperano di scatenare qualche buon proposito per migliorarsi.</p>
<p><span id="more-24"></span>Su alcuni concordo più che su altri:</p>
<ul>
<li>non commenti il codice con qualcosa tipo <a href="http://www.phpdoc.org/" title="phpDoc">phpDoc</a>, io aggiungo non commenti il codice e basta</li>
<li>non esegui l&#8217;escaping e la validazione di input e delle query sql (di cui abbiamo parlato)</li>
<li>non pianifichi, progetti la tua applicazione in modo dettagliato prima di cominciare a scrivere codice</li>
<li>non tieni separati i diversi layer utilizzando qualcosa basato su <a href="http://en.wikipedia.org/wiki/Model-view-controller" title="MVC">MVC</a> (model-view-control)</li>
<li>non ha mai sentito parlare di sql injection or cross-site scripting (<a href="http://en.wikipedia.org/wiki/Cross-site_scripting" title="Xss">Xss</a>)</li>
<li>non usi un abstraction layer per interagire con i database</li>
<li>&#8230;</li>
</ul>
<p>E voi cosa ne pensate? Lasciate pure la vostra opinione nei commenti qui sotto.</p>
]]></content:encoded>
			<wfw:commentRss>http://phpblog.it/2008/02/14/40-indizi-per-definirti-uno-scarso-programmatore-php/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

