<?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>Consulenza-Web.com &#187; CakePHP</title>
	<atom:link href="http://www.consulenza-web.com/tag/cakephp/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.consulenza-web.com</link>
	<description>Blog di Marco Pegoraro su Consulenza Web ed Informatica, Programmazione Web e realizzazione di Siti Web Accessibili.</description>
	<lastBuildDate>Fri, 23 Jul 2010 11:13:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>CakePOWER: Progettazione di un Framework</title>
		<link>http://www.consulenza-web.com/2009/09/cakepower-progettazione-di-un-framework/</link>
		<comments>http://www.consulenza-web.com/2009/09/cakepower-progettazione-di-un-framework/#comments</comments>
		<pubDate>Fri, 11 Sep 2009 07:49:35 +0000</pubDate>
		<dc:creator>peg</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[CakePOWER]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[applicativo]]></category>
		<category><![CDATA[applicazione]]></category>
		<category><![CDATA[crud]]></category>
		<category><![CDATA[php framework]]></category>
		<category><![CDATA[rad]]></category>

		<guid isPermaLink="false">http://www.consulenza-web.com/?p=99</guid>
		<description><![CDATA[Quest0 articolo segna l&#8217;inizio di una serie di considerazioni e analisi il cui obiettivo è la progettazione e costruzione di un framework applicativo web based. La mia esperienza nello sviluppo di applicazioni web (siti web, gestionali, piccole utility) mi ha portato ad elaborare alcune definizioni che utilizzerò nei successivi articoli di analisi: framework: è l&#8217;insieme [...]]]></description>
			<content:encoded><![CDATA[<p>Quest0 articolo segna l&#8217;inizio di una serie di considerazioni e analisi il cui obiettivo è la <strong>progettazione e costruzione di un framework applicativo</strong> web based.</p>
<p>La mia esperienza nello sviluppo di applicazioni web (siti web, gestionali, piccole utility) mi ha portato ad elaborare alcune definizioni che utilizzerò nei successivi articoli di analisi:</p>
<ul>
<li><strong>framework:</strong> è l&#8217;insieme di strumenti che consentono di enunciare le istruzioni logiche che compongono l&#8217;applicazione.</li>
<li><strong>applicazione: </strong>è l&#8217;insieme delle istruzioni necessarie a <span style="text-decoration: underline;">definire la logica astratta</span> di un software.</li>
<li><strong>interfaccia: </strong>è lo strumento di comunicazione tra l&#8217;applicazione e il suo utente.</li>
<li><strong>prodotto:</strong> è l&#8217;insieme di applicazione e interfaccia cui vengono applicate delle <span style="text-decoration: underline;">personalizzazioni specifiche</span> per la singola realizzazione.</li>
</ul>
<p style="text-align: center;"><a style="text-decoration: none;" href="http://www.consulenza-web.com/wp-content/uploads/2009/09/logical-area.jpg"><img class="size-medium wp-image-105 aligncenter" title="Aree Logiche di Sviluppo" src="http://www.consulenza-web.com/wp-content/uploads/2009/09/logical-area-300x300.jpg" alt="schema organizzativo delle aree logiche in cui si divide lo sviluppo di un'applicazione web." width="300" height="300" /></a></p>
<p><span style="text-decoration: underline;">Nell&#8217;immagine precedente la linea rossa rappresenta la separazione logica tra sviluppo dell&#8217;applicazione e lo sviluppo del prodotto.</span></p>
<p>L&#8217;applicazione è costituita di istruzioni logiche generiche che possono descrivere una <strong>soluzione software ad un problema collettivo</strong>. Lo sviluppo del prodotto si concentra sulla selezione delle applicazioni necessarie e sulla d<strong>efinizione di un insieme di regole di personalizzazione</strong>.</p>
<p>Nel momento in cui ci viene richiesto lo sviluppo di un prodotto (es un sito web) dobbiamo soffermarci e ragionare sulle applicazioni che lo compongono: <em>gestione utenti, gestione pagine, gestione news, photo gallery</em> e sulle regole di personalizzazione che lo completano: <em>template grafico, numero di news per pagina, gestione dei menus</em>.</p>
<p><strong>Diventa facile capire che l&#8217;obiettivo è spostare la line rossa in modo che l&#8217;area di configurazione occupi sempre meno spazio nella costruzione di un prodotto</strong>. Il tempo che dedichiamo alla costruzione di un prodotto dev&#8217;essere concentrato sulla soddisfazione delle personalizzazioni richieste e non sullo sviluppo delle funzionalità</p>
<h1>Il compito del framework:</h1>
<p>La realizzazione pratica di quanto illustrato espone alcuni prerequisiti fondamentali che il framework deve soddisfare:</p>
<ul>
<li>Tutte le operazioni di configurazione devono poter essere descritte su files fisicamente distinti dai sorgenti dell&#8217;applicazione.</li>
<li>I moduli applicativi (plugins) che compongono l&#8217;applicazione devono poter interoperare al fine di estendere e/o modificare il comportamento di altri moduli.</li>
<li>I moduli applicativi devono essere sensibili ad un sistema di configurazione strutturato e scalabile.</li>
<li>I moduli applicativi devono erogare funzionalità logiche &#8220;dropIn&#8221;. Non deve essere richiesta modifica dei files sorgenti!</li>
</ul>
<h1>CakePOWER: un po&#8217; di pepe a CakePHP!</h1>
<p><strong>CakePOWER</strong> è il progetto che mira a <em>concretizzare l&#8217;area core</em> dell&#8217;immagine qui sopra fornendo tutti gli strumenti necessari allo <em>sviluppo di plugins</em> (moduli applicativi) al fine di vendere prodotti (siti web e gestionali applicativi) la cui caratteristica principale è <strong>alta qualità a basso costo</strong>.</p>
<p>Ho iniziato cercando un framework (PHP) che implementi il paradigma <a title="Definizione di MVC (inglese)" href="http://en.wikipedia.org/wiki/Model–view–controller">MVC</a> e la scelta è ricaduta su <a title="CakePHP MVC Framework" href="http://cakephp.org">CakePHP</a> in quanto progetto abbastanza maturo e direzionato sulla creazione di automatismi che permettono di sviluppare il più velocemente possibile.</p>
<p>CakePOWER sarà sviluppato come un&#8217;estensione di CakePHP la quale integra funzionalità complesse nel framework. Di fatto tutto il sorgente sarà contenuto nella folder <em>cake_power</em> e l&#8217;integrazione avverrà mediante poche semplici istruzioni da inserire nei files di configurazione principali dell&#8217;applicazione.</p>
<p><strong>CakePOWER è un&#8217;estensione, non un fork!</strong></p>
<p>Lo stato attuale del progetto è pressochè nullo: sto scrivendo la documentazione delle prime strutture logiche che comporranno CakePOWER. La scelta di sviluppare prima la documentazione è fondamentale per garantire la qualità del codice prodotto.</p>
<p>A breve i sorgenti saranno disponibili su Google Project (<a title="CakePOWER su Google Project" href="http://code.google.com/p/cakepower/">http://code.google.com/p/cakepower/</a>).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.consulenza-web.com/2009/09/cakepower-progettazione-di-un-framework/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Utilizzare il layout di un plugin da un punto qualunque dell&#8217;applicazione</title>
		<link>http://www.consulenza-web.com/2009/06/utilizzare-il-layout-di-un-plugin/</link>
		<comments>http://www.consulenza-web.com/2009/06/utilizzare-il-layout-di-un-plugin/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 18:05:05 +0000</pubDate>
		<dc:creator>peg</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[code design]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[how to]]></category>
		<category><![CDATA[rad]]></category>
		<category><![CDATA[ToolTIP]]></category>

		<guid isPermaLink="false">http://www.consulenza-web.com/?p=95</guid>
		<description><![CDATA[CakePHP 1.2 introduce una serie di funzionalità dedicate esplicitamente allo sviluppo RAD di applicazioni. In questo articolo spiego come è possibile utilizzare dei layout contenuti in uno specifico plugin utilizzando quindi il concetto stesso di plugin per re-distribuire contenuti grafici oltre alle funzionalità contenute in helpers e components. All&#8217;interno di un metodo di controller, appena [...]]]></description>
			<content:encoded><![CDATA[<p>CakePHP 1.2 introduce una serie di funzionalità dedicate esplicitamente allo <strong>sviluppo RAD di applicazioni</strong>.</p>
<p>In questo articolo spiego come è possibile utilizzare dei <strong>layout contenuti in uno specifico plugin</strong> utilizzando quindi il concetto stesso di plugin per <strong>re-distribuire contenuti grafici</strong> oltre alle funzionalità contenute in helpers e components.</p>
<p>All&#8217;interno di un metodo di controller, appena prima del render (o della conclusione del metodo) è sufficiente specificare plugin e layout che si desidera utilizzare per il rendering della richiesta:</p>
<pre>...
$this-&gt;plugin = 'Myplugin';
$this-&gt;layout = 'my_layout';
...</pre>
<p>Questo tipo di codice produce la richiesta del file: &#8220;/app/plugins/myplugin/views/layouts/my_layout.ctp&#8221; da utilizzarsi come layout per la richiesta in corso.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.consulenza-web.com/2009/06/utilizzare-il-layout-di-un-plugin/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Utilizzare operatori sql in CakePHP find()</title>
		<link>http://www.consulenza-web.com/2009/02/utilizzare-operatori-sql-in-cakephp-find/</link>
		<comments>http://www.consulenza-web.com/2009/02/utilizzare-operatori-sql-in-cakephp-find/#comments</comments>
		<pubDate>Fri, 06 Feb 2009 12:46:18 +0000</pubDate>
		<dc:creator>peg</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[find]]></category>
		<category><![CDATA[query]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://www.consulenza-web.com/?p=29</guid>
		<description><![CDATA[Riporto il sunto di una discussione sviluppata sul Gruppo Google di CakePHP inerente all&#8217;utilizzo di operatori SQL nelle operazioni di estrazione dati (finder query): http://groups.google.com/group/cake-php/browse_thread/thread/89dd8a8846bad3a1?hl=en L&#8217;autore ha la necessità di estrarre da un campo di testo un numero limitato di caratteri utilizzando l&#8217;operatore SQL LEFT: LEFT(Table.field, len) as new_field_name La soluzione proposta (e testata) consiste [...]]]></description>
			<content:encoded><![CDATA[<p>Riporto il sunto di una discussione sviluppata sul <a title="Vai al gruppo CakePHP" href="http://groups.google.com/group/cake-php/" target="_blank">Gruppo Google</a> di CakePHP inerente all&#8217;utilizzo di operatori SQL nelle operazioni di estrazione dati (finder query):<br />
<a title="Vai alla discussione" href="http://groups.google.com/group/cake-php/browse_thread/thread/89dd8a8846bad3a1?hl=en" target="_blank">http://groups.google.com/group/cake-php/browse_thread/thread/89dd8a8846bad3a1?hl=en</a></p>
<p>L&#8217;autore ha la necessità di estrarre da un campo di testo un numero limitato di caratteri utilizzando l&#8217;operatore SQL LEFT:</p>
<pre>LEFT(Table.field, len) as new_field_name</pre>
<p>La soluzione proposta (e testata) consiste nell&#8217;utilizzo dell&#8217;operatore direttamente nell&#8217;elenco dei campi da estrarre come parametro aggiuntivo dell&#8217;operazione <em>find()</em>.</p>
<pre>$list = $this-&gt;User-&gt;find( "all", array(
  fields = array(
    'id',
    'username',
    'left(User.username, 5) as short_username'
  )
));</pre>
<p>Questo comando di estrazione genera come output la seguente struttura associativa:</p>
<pre>array(
  0 =&gt; array(
    [User] =&gt; array(
      [id] =&gt; 1
      [username] = Marco Pegoraro
    )
    [0] =&gt; array(
      [short_username] =&gt; Marco
    )
  )
)</pre>
<p>Si può dunque notare come il campo ottenuto mediante operatore SQL sia stato erogato fuori dal raggruppamento del modello e inserito sotto ad un indice numerico.</p>
<p>Ho fatto alcuni test utilizzando le relazioni tra i modelli (belongsTo) e ho estratto campi da più modelli definendo campi <em>elaborati</em> da più modelli. Tali campi vengono sempre proposti sotto l&#8217;indice 0.</p>
<p>Al momento in cui scrivo la discussione è in attesa di una soluzione per modificare in modo esplicito il nome del raggruppamento di questi campi prodotto di un operatore SQL.</p>
<h2>Alcune risorse utili:</h2>
<ul>
<li><a href="http://groups.google.com/group/cake-php/browse_thread/thread/f823cc7f168cd619?hl=en" target="_blank">http://groups.google.com/group/cake-php/browse_thread/thread/f823cc7f168cd619?hl=en</a></li>
<li><a href="http://teknoid.wordpress.com/2008/09/29/dealing-with-calculated-fields-in-cakephps-find/" target="_blank">http://teknoid.wordpress.com/2008/09/29/dealing-with-calculated-fields-in-cakephps-find/</a></li>
<li><a href="http://i-love-cake.pastebin.com/f78d0639a" target="_blank">http://i-love-cake.pastebin.com/f78d0639a</a> (MySql Dbo variant)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.consulenza-web.com/2009/02/utilizzare-operatori-sql-in-cakephp-find/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHP: Utilizzare &#8220;bake script&#8221; con MAMP su Mac OSX</title>
		<link>http://www.consulenza-web.com/2009/01/cakephp-utilizzare-bake-script-con-mamp-su-mac-osx/</link>
		<comments>http://www.consulenza-web.com/2009/01/cakephp-utilizzare-bake-script-con-mamp-su-mac-osx/#comments</comments>
		<pubDate>Wed, 28 Jan 2009 07:40:43 +0000</pubDate>
		<dc:creator>peg</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[ToolTIP]]></category>

		<guid isPermaLink="false">http://www.consulenza-web.com/?p=12</guid>
		<description><![CDATA[Gli sviluppatori CakePHP che volessero utilizzare il comodo script &#8220;bake&#8221; su di una LAMP realizzata con MAMP si trovano di fronte ad un errore di connessione con il server db: --------------------------------------------------------------- Bake Model Path: /Users/peg/Sites/cake12/app/models/ --------------------------------------------------------------- Warning: mysql_connect(): Can't connect to local MySQL server through socket '/var/mysql/mysql.sock' (2) in /Users/peg/Sites/cake12/cake/libs/model/datasources/dbo/dbo_mysql.php on line 370 Warning: mysql_select_db(): [...]]]></description>
			<content:encoded><![CDATA[<p>Gli sviluppatori CakePHP che volessero utilizzare il comodo script &#8220;bake&#8221; su di una LAMP realizzata con MAMP si trovano di fronte ad un errore di connessione con il server db:</p>
<pre>---------------------------------------------------------------
Bake Model
Path: /Users/peg/Sites/cake12/app/models/
---------------------------------------------------------------

Warning: mysql_connect(): Can't connect to local MySQL server through socket
<strong>'/var/mysql/mysql.sock'</strong> (2) in
/Users/peg/Sites/cake12/cake/libs/model/datasources/dbo/dbo_mysql.php on line 370

Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in
/Users/peg/Sites/cake12/cake/libs/model/datasources/dbo/dbo_mysql.php on line 375

Warning: mysql_get_server_info(): supplied argument is not a valid MySQL-Link resource in
/Users/peg/Sites/cake12/cake/libs/model/datasources/dbo/dbo_mysql.php on line 383

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in
/Users/peg/Sites/cake12/cake/libs/model/datasources/dbo/dbo_mysql.php on line 407

Error: Your database does not have any tables.</pre>
<p>Questo problema è dovuto al fatto che viene utilizzato il socket mysql di default presente nel sistema OSX (evidenziato in grassetto nel codice precedente).</p>
<p>La soluzione a questo problema è modificare la configurazione della connessione database di CakePHP aggiungendo la seguente definizione per la porta:</p>
<pre>'port' =&gt; '/Applications/MAMP/tmp/mysql/mysql.sock'</pre>
<p>Così facendo si forza l&#8217;utilizzo del server MySQL installato da MAMP e gestibile mediante i classici strumenti del pacchetto.</p>
<p>Diventa dunque possibile utilizzare lo script bake!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.consulenza-web.com/2009/01/cakephp-utilizzare-bake-script-con-mamp-su-mac-osx/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
