<?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>Symfony-IT &#187; documentazione</title>
	<atom:link href="http://www.symfony.it/categoria/documentazione/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.symfony.it</link>
	<description>Just another Symfony Framework weblog</description>
	<lastBuildDate>Mon, 30 Jan 2012 13:53:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<div id='fb-root'></div>
					<script type='text/javascript'>
						window.fbAsyncInit = function()
						{
							FB.init({appId: null, status: true, cookie: true, xfbml: true});
						};
						(function()
						{
							var e = document.createElement('script'); e.async = true;
							e.src = document.location.protocol + '//connect.facebook.net/it_IT/all.js';
							document.getElementById('fb-root').appendChild(e);
						}());
					</script>	
						<item>
		<title>Utilizzare le Estensioni di Doctrine in progetti symfony2</title>
		<link>http://www.symfony.it/articoli/555/symfony2-doctrine-extensions/</link>
		<comments>http://www.symfony.it/articoli/555/symfony2-doctrine-extensions/#comments</comments>
		<pubDate>Thu, 24 Nov 2011 08:30:08 +0000</pubDate>
		<dc:creator>Francesco Tassi</dc:creator>
				<category><![CDATA[bundle]]></category>
		<category><![CDATA[doctrine]]></category>
		<category><![CDATA[documentazione]]></category>
		<category><![CDATA[orm]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[symfony2]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.symfony.it/?p=555</guid>
		<description><![CDATA[Doctrine prevede un set di eventi che permettono di modificarne ed estenderne il comportamento. Tramite l&#8217;utilizzo di questi eventi è possibile implementare nuove funzionalità non previste dall&#8217; ORM. Sfruttando questa potenzialità è stato creato un set di estensioni per mettere a disposizione degli sviluppatori alcuni comportamenti di uso comune. L&#8217;integrazione all&#8217;interno di symfony2 è facilitata [...]]]></description>
			<content:encoded><![CDATA[<p>Doctrine prevede un set di <strong>eventi</strong> che permettono di modificarne ed <strong>estenderne il comportamento</strong>. Tramite l&#8217;utilizzo di questi eventi è possibile <strong>implementare nuove funzionalità</strong> non previste dall&#8217; ORM. Sfruttando questa potenzialità è stato creato un <a title="DoctrineExtensions" href="https://github.com/l3pp4rd/DoctrineExtensions">set di estensioni</a> per mettere a disposizione degli sviluppatori alcuni <strong>comportamenti di uso comune</strong>. L&#8217;integrazione all&#8217;interno di symfony2 è facilitata dal bundle <strong><a title="DoctrineExtensionsBundle" href="https://github.com/stof/StofDoctrineExtensionsBundle">StofDoctrineExtensionsBundle</a></strong>.</p>
<p><span id="more-555"></span></p>
<p>Il <a title="DoctrineExtensions" href="https://github.com/l3pp4rd/DoctrineExtensions">repository DoctrineExtensions</a> prevede queste estensioni:</p>
<ul>
<li>Translatable</li>
<li>Sluggable</li>
<li>Timestampable</li>
<li>Loggable</li>
<li>Tree</li>
<li>Sortable</li>
</ul>
<p>I nomi sono piuttosto indicativi riguardo allo scopo di ognuna. Chi viene da symfony 1.x e doctrine 1.x ricorderà certamente una serie di plugin *ActAs* che avevano esattamente lo stesso scopo di queste estensioni.</p>
<p>Come detto, per utilizzare questi comportamenti in progetti symfony2, è possibile usufruire del bundle<strong> <a title="DoctrineExtensionsBundle" href="https://github.com/stof/StofDoctrineExtensionsBundle">StofDoctrineExtensionsBundle</a> </strong>che mette a disposizione listener e configurazioni varie per semplificare l&#8217;integrazione all&#8217;interno del progetto.</p>
<p><del>In questo momento il bundle non sembra gestire l&#8217;estensione Sortable ma non ho ancora verificato se si tratta di una carenza di documentazione o di una reale mancanza nell&#8217;implementazione dell&#8217;estensione.</del></p>
<p>Nei prossimi post spiegherò come configurare e utilizzare correttamente ognuna delle estensioni disponibili con il bundle.</p>
<div class='wpfblike' style='height: 40px;'><fb:like href='http://www.symfony.it/articoli/555/symfony2-doctrine-extensions/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>]]></content:encoded>
			<wfw:commentRss>http://www.symfony.it/articoli/555/symfony2-doctrine-extensions/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Abilitare estensioni aggiuntive per Twig</title>
		<link>http://www.symfony.it/articoli/540/abilitare-estensioni-twig/</link>
		<comments>http://www.symfony.it/articoli/540/abilitare-estensioni-twig/#comments</comments>
		<pubDate>Mon, 14 Nov 2011 21:35:19 +0000</pubDate>
		<dc:creator>Francesco Tassi</dc:creator>
				<category><![CDATA[symfony2]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[twig]]></category>

		<guid isPermaLink="false">http://www.symfony.it/?p=540</guid>
		<description><![CDATA[Twig è il template engine integrato in Symfony2. Nella Standard Edition oltre al core di Twig è presente anche il repository delle estensioni. Le funzionalità di queste estensioni non sono disponibili automaticamente, è richiesto all&#8217;utente di attivarle manualmente, vediamo come.Il repository ufficiale delle estensioni di twig ne contiene, al momento, 4: Debug I18n Intl Text [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://twig.sensiolabs.org/">Twig</a> è il template engine integrato in Symfony2. Nella <a href="http://symfony.com/download">Standard Edition</a> oltre al core di Twig è presente anche il repository <a href="https://github.com/fabpot/Twig-extensions">delle estensioni</a>. <strong>Le funzionalità di queste estensioni non sono disponibili automaticamente, è richiesto all&#8217;utente di attivarle</strong> manualmente, vediamo come.<span id="more-540"></span>Il repository ufficiale delle estensioni di twig ne contiene, al momento, 4:</p>
<ul>
<li>Debug</li>
<li>I18n</li>
<li>Intl</li>
<li>Text</li>
</ul>
<p>Per default questo viene clonato all&#8217;interno della dir &#8220;vendor/twig-extensions&#8221;, potete identificare facilmente la posizione dei sorgenti tramite il file di autoload (app/autoload.php).</p>
<p><strong>Abilitare</strong> una di queste estensioni richiede semplicemente di <strong>taggare</strong> il servizio corrispondente con il <strong>tag twig.extension</strong> tramite la configurazione del DIC.</p>
<p>Volendo ad esempio abilitare l&#8217;estensione Text (Twig_Extensions_Extension_Text) sarà sufficiente aggiungere al file config.yml, all&#8217;interno del blocco &#8220;services&#8221;, queste righe:</p>

<div class="wp_syntax"><div class="code"><pre class="yml" style="font-family:monospace;">twig.extension.text:
        class: Twig_Extensions_Extension_Text
        tags:
            - { name: twig.extension }</pre></div></div>

<p>A questo punto le funzionalità dell&#8217;estensione sono disponibili all&#8217;interno dei nostri template.</p>
<p>Delle 4 estensioni disponibili <strong>Debug</strong> è l&#8217;unica che <strong>merita una nota particolare</strong>, almeno per quanto riguarda l&#8217;installazione. Questa estensione infatti, anche se abilitata, <strong>si attiva solamente se twig è in modalità debug</strong>. In configurazione predefinita lo stato di debug di twig viene ereditato dall&#8217; environment di Symfony, questo significa che avrete a disposizione informazioni di debug solamente utilizzando l&#8217;environment dev.</p>
<p>Ovviamente tramite file di configurazione siete liberi di attivare o disattivare il debug di twig per ogni ambiente, aggiungendo o modificando la chiave &#8220;debug&#8221; all&#8217;intero del blocco twig in config.yml.</p>
<p>Per i dettagli di funzionamento delle singole estensioni vi rimando alle relative documentazioni.  Anche in questo caso però debug merita una piccola nota rispetto alle altre. Attivando il debug su un intero template infatti twig cercherà di fare un var_dump di tutte le variabili presenti. Questo vuol dire, senza xdebug attivo, che è molto probabile che il rendering vada in timeout o in memory_limit. Una buona pratica è quella di attivare il debug solo per le variabili che volete veramente ispezionare.</p>
<p>Queste estensioni non aggiungono funzionalità incredibili a twig, ma offrono comunque delle utility interessanti. <strong>In particolare ho trovato utili Text e Debug</strong>, ma credo che in futuro guadagneremo altre estensioni che andranno a fare da complemento al già ottimo template engine.</p>
<p>Nel caso aveste qualche buona idea per un&#8217;estensione non dimenticatevi di <a href="https://github.com/fabpot/Twig-extensions">mandare la vostra pull request</a>.</p>
<div class='wpfblike' style='height: 40px;'><fb:like href='http://www.symfony.it/articoli/540/abilitare-estensioni-twig/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>]]></content:encoded>
			<wfw:commentRss>http://www.symfony.it/articoli/540/abilitare-estensioni-twig/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Usare Symfony2 con subversion</title>
		<link>http://www.symfony.it/articoli/520/usare-symfony2-con-subversion/</link>
		<comments>http://www.symfony.it/articoli/520/usare-symfony2-con-subversion/#comments</comments>
		<pubDate>Mon, 03 Oct 2011 14:39:54 +0000</pubDate>
		<dc:creator>Massimiliano Arione</dc:creator>
				<category><![CDATA[symfony2]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://www.symfony.it/?p=520</guid>
		<description><![CDATA[Edit: questo post è stato superato dalla pubblicazione di questa guida. Viene lasciato sul blog per motivi storici, ma si consiglia di seguire quanto spiegato nella guida suddetta. Sappiamo che Symfony2 predilige l&#8217;utilizzo di git come sistema di versionamento. Tuttavia, potrebbero esserci tutta una serie di ragioni per cui un progetto abbia bisogno di subversion: [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Edit</strong>: questo post è stato superato dalla pubblicazione di <a href="http://docs.symfony.it/cookbook/workflow/new_project_svn.html" title="Come creare e memorizzare un progetto Symfony2 in Subversion">questa guida</a>. Viene lasciato sul blog per motivi storici, ma si <em>consiglia di seguire quanto spiegato nella guida suddetta</em>.</p>
<hr />
<p>Sappiamo che Symfony2 predilige l&#8217;utilizzo di git come sistema di versionamento. Tuttavia, potrebbero esserci tutta una serie di ragioni per cui un progetto abbia bisogno di subversion: la stessa documentazione ufficiale ne fa <a href="http://docs.symfony.it/cookbook/workflow/new_project_git.html">un accenno</a>, purtroppo senza addentrarsi nei dettagli.<br />
Ecco qui cosa fare per avere un progetto Symfony2 funzionante con svn. Diamo per scontato di trovarci un una cartella in cui è stato fatto un checkout di un repository e in cui la cartella <em>vendor</em> di Symfony2 non sia presente (per esempio, perché il repository contiene uno scheletro di progetto simile a quello della <a href="http://symfony.com/download">Standard Edition</a> senza venditori).<br />
La prima cosa da fare è aggiungere i vari bundle e le altre dipendenza in externals:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mkdir</span> vendor
<span style="color: #c20cb9; font-weight: bold;">svn</span> pe <span style="color: #c20cb9; font-weight: bold;">svn</span>:externals vendor</pre></div></div>

<p>Nella finestra dell&#8217;editor, inserire le seguenti righe:</p>

<div class="wp_syntax"><div class="code"><pre class="vim" style="font-family:monospace;">symfony              http<span style="color: #000000;">://</span>svn<span style="color: #000000;">.</span>github<span style="color: #000000;">.</span><span style="color: #668080;">com</span><span style="color: #000000;">/</span>symfony<span style="color: #000000;">/</span>symfony<span style="color: #000000;">.</span>git
twig                 http<span style="color: #000000;">://</span>svn<span style="color: #000000;">.</span>github<span style="color: #000000;">.</span><span style="color: #668080;">com</span><span style="color: #000000;">/</span>fabpot<span style="color: #000000;">/</span>Twig<span style="color: #000000;">.</span>git
monolog              http<span style="color: #000000;">://</span>svn<span style="color: #000000;">.</span>github<span style="color: #000000;">.</span><span style="color: #668080;">com</span><span style="color: #000000;">/</span>Seldaek<span style="color: #000000;">/</span>monolog<span style="color: #000000;">.</span>git
doctrine<span style="color: #000000;">-</span>common      http<span style="color: #000000;">://</span>svn<span style="color: #000000;">.</span>github<span style="color: #000000;">.</span><span style="color: #668080;">com</span><span style="color: #000000;">/</span>doctrine<span style="color: #000000;">/</span>common<span style="color: #000000;">.</span>git
doctrine<span style="color: #000000;">-</span>dbal        http<span style="color: #000000;">://</span>svn<span style="color: #000000;">.</span>github<span style="color: #000000;">.</span><span style="color: #668080;">com</span><span style="color: #000000;">/</span>doctrine<span style="color: #000000;">/</span>dbal<span style="color: #000000;">.</span>git
doctrine             http<span style="color: #000000;">://</span>svn<span style="color: #000000;">.</span>github<span style="color: #000000;">.</span><span style="color: #668080;">com</span><span style="color: #000000;">/</span>doctrine<span style="color: #000000;">/</span>doctrine2<span style="color: #000000;">.</span>git
swiftmailer          http<span style="color: #000000;">://</span>svn<span style="color: #000000;">.</span>github<span style="color: #000000;">.</span><span style="color: #668080;">com</span><span style="color: #000000;">/</span>swiftmailer<span style="color: #000000;">/</span>swiftmailer<span style="color: #000000;">.</span>git
assetic              http<span style="color: #000000;">://</span>svn<span style="color: #000000;">.</span>github<span style="color: #000000;">.</span><span style="color: #668080;">com</span><span style="color: #000000;">/</span>kriswallsmith<span style="color: #000000;">/</span>assetic<span style="color: #000000;">.</span>git
twig<span style="color: #000000;">-</span>extensions      http<span style="color: #000000;">://</span>svn<span style="color: #000000;">.</span>github<span style="color: #000000;">.</span><span style="color: #668080;">com</span><span style="color: #000000;">/</span>fabpot<span style="color: #000000;">/</span>Twig<span style="color: #000000;">-</span>extensions<span style="color: #000000;">.</span>git
metadata             http<span style="color: #000000;">://</span>svn<span style="color: #000000;">.</span>github<span style="color: #000000;">.</span><span style="color: #668080;">com</span><span style="color: #000000;">/</span>schmittjoh<span style="color: #000000;">/</span>metadata<span style="color: #000000;">.</span>git
&nbsp;
doctrine<span style="color: #000000;">-</span>extensions  http<span style="color: #000000;">://</span>svn<span style="color: #000000;">.</span>github<span style="color: #000000;">.</span><span style="color: #668080;">com</span><span style="color: #000000;">/</span>l3pp4rd<span style="color: #000000;">/</span>DoctrineExtensions<span style="color: #000000;">.</span>git
&nbsp;
bundles<span style="color: #000000;">/</span>Stof<span style="color: #000000;">/</span>DoctrineExtensionsBundle       http<span style="color: #000000;">://</span>svn<span style="color: #000000;">.</span>github<span style="color: #000000;">.</span><span style="color: #668080;">com</span><span style="color: #000000;">/</span>stof<span style="color: #000000;">/</span>StofDoctrineExtensionsBundle<span style="color: #000000;">.</span>git
&nbsp;
bundles<span style="color: #000000;">/</span>Sensio<span style="color: #000000;">/</span>Bundle<span style="color: #000000;">/</span>FrameworkExtraBundle  http<span style="color: #000000;">://</span>svn<span style="color: #000000;">.</span>github<span style="color: #000000;">.</span><span style="color: #668080;">com</span><span style="color: #000000;">/</span>sensio<span style="color: #000000;">/</span>SensioFrameworkExtraBundle<span style="color: #000000;">.</span>git
bundles<span style="color: #000000;">/</span>Sensio<span style="color: #000000;">/</span>Bundle<span style="color: #000000;">/</span>DistributionBundle    http<span style="color: #000000;">://</span>svn<span style="color: #000000;">.</span>github<span style="color: #000000;">.</span><span style="color: #668080;">com</span><span style="color: #000000;">/</span>sensio<span style="color: #000000;">/</span>SensioDistributionBundle<span style="color: #000000;">.</span>git
bundles<span style="color: #000000;">/</span>Sensio<span style="color: #000000;">/</span>Bundle<span style="color: #000000;">/</span>GeneratorBundle       http<span style="color: #000000;">://</span>svn<span style="color: #000000;">.</span>github<span style="color: #000000;">.</span><span style="color: #668080;">com</span><span style="color: #000000;">/</span>sensio<span style="color: #000000;">/</span>SensioGeneratorBundle<span style="color: #000000;">.</span>git
bundles<span style="color: #000000;">/</span>JMS<span style="color: #000000;">/</span>SecurityExtraBundle             http<span style="color: #000000;">://</span>svn<span style="color: #000000;">.</span>github<span style="color: #000000;">.</span><span style="color: #668080;">com</span><span style="color: #000000;">/</span>schmittjoh<span style="color: #000000;">/</span>JMSSecurityExtraBundle<span style="color: #000000;">.</span>git
&nbsp;
cg<span style="color: #000000;">-</span>library                                  http<span style="color: #000000;">://</span>svn<span style="color: #000000;">.</span>github<span style="color: #000000;">.</span><span style="color: #668080;">com</span><span style="color: #000000;">/</span>schmittjoh<span style="color: #000000;">/</span>cg<span style="color: #000000;">-</span>library<span style="color: #000000;">.</span>git
bundles<span style="color: #000000;">/</span>JMS<span style="color: #000000;">/</span>AopBundle                       http<span style="color: #000000;">://</span>svn<span style="color: #000000;">.</span>github<span style="color: #000000;">.</span><span style="color: #668080;">com</span><span style="color: #000000;">/</span>schmittjoh<span style="color: #000000;">/</span>JMSAopBundle<span style="color: #000000;">.</span>git
&nbsp;
symfony<span style="color: #000000;">/</span>src<span style="color: #000000;">/</span>Symfony<span style="color: #000000;">/</span>Bundle<span style="color: #000000;">/</span>AsseticBundle    http<span style="color: #000000;">://</span>svn<span style="color: #000000;">.</span>github<span style="color: #000000;">.</span><span style="color: #668080;">com</span><span style="color: #000000;">/</span>symfony<span style="color: #000000;">/</span>AsseticBundle<span style="color: #000000;">.</span>git</pre></div></div>

<p>Si noti che sono stati aggiunti, oltre ai bundle di base, alcuni altri bundle utili.<br />
Il problema di questo approccio è che github, almeno attualmente, non supporta il checkout di tag o branch tramite svn. Per questo le versioni dei vari venditori importate saranno quelle dei rispettivi <em>master</em>, quindi le versioni in sviluppo. Se quindi si riscontrano errori o eccezioni dovuti per esempio a metodi mancanti, si verifichi che il file <code>app/bootstrap.php.cache</code> contenga tutto ciò che è necessario. Ovviamente, va adattato anche il file relativo all&#8217;autoload:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// app/autoload.php</span>
<span style="color: #000088;">$loader</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">registerNamespaces</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
    <span style="color: #0000ff;">'Symfony'</span>          <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>__DIR__<span style="color: #339933;">.</span><span style="color: #0000ff;">'/../vendor/symfony/src'</span><span style="color: #339933;">,</span> __DIR__<span style="color: #339933;">.</span><span style="color: #0000ff;">'/../vendor/bundles'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'Sensio'</span>           <span style="color: #339933;">=&gt;</span> __DIR__<span style="color: #339933;">.</span><span style="color: #0000ff;">'/../vendor/bundles'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'JMS'</span>              <span style="color: #339933;">=&gt;</span> __DIR__<span style="color: #339933;">.</span><span style="color: #0000ff;">'/../vendor/bundles'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'CG'</span>               <span style="color: #339933;">=&gt;</span> __DIR__<span style="color: #339933;">.</span><span style="color: #0000ff;">'/../vendor/cg-library/src'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'Doctrine\\Common'</span> <span style="color: #339933;">=&gt;</span> __DIR__<span style="color: #339933;">.</span><span style="color: #0000ff;">'/../vendor/doctrine-common/lib'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'Doctrine\\DBAL'</span>   <span style="color: #339933;">=&gt;</span> __DIR__<span style="color: #339933;">.</span><span style="color: #0000ff;">'/../vendor/doctrine-dbal/lib'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'Doctrine'</span>         <span style="color: #339933;">=&gt;</span> __DIR__<span style="color: #339933;">.</span><span style="color: #0000ff;">'/../vendor/doctrine/lib'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'Monolog'</span>          <span style="color: #339933;">=&gt;</span> __DIR__<span style="color: #339933;">.</span><span style="color: #0000ff;">'/../vendor/monolog/src'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'Assetic'</span>          <span style="color: #339933;">=&gt;</span> __DIR__<span style="color: #339933;">.</span><span style="color: #0000ff;">'/../vendor/assetic/src'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'Metadata'</span>         <span style="color: #339933;">=&gt;</span> __DIR__<span style="color: #339933;">.</span><span style="color: #0000ff;">'/../vendor/metadata/src'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'Gedmo'</span>            <span style="color: #339933;">=&gt;</span> __DIR__<span style="color: #339933;">.</span><span style="color: #0000ff;">'/../vendor/doctrine-extensions/lib'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'Stof'</span>             <span style="color: #339933;">=&gt;</span> __DIR__<span style="color: #339933;">.</span><span style="color: #0000ff;">'/../vendor/bundles'</span><span style="color: #339933;">,</span>
<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>e anche quello relativo all&#8217;attivazione dei bundle:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// app/AppKernel.php</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> registerBundles<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$bundles</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
        <span style="color: #000000; font-weight: bold;">new</span> Symfony\Bundle\FrameworkBundle\FrameworkBundle<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
        <span style="color: #000000; font-weight: bold;">new</span> Symfony\Bundle\SecurityBundle\SecurityBundle<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
        <span style="color: #000000; font-weight: bold;">new</span> Symfony\Bundle\TwigBundle\TwigBundle<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
        <span style="color: #000000; font-weight: bold;">new</span> Symfony\Bundle\MonologBundle\MonologBundle<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
        <span style="color: #000000; font-weight: bold;">new</span> Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
        <span style="color: #000000; font-weight: bold;">new</span> Symfony\Bundle\DoctrineBundle\DoctrineBundle<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
        <span style="color: #000000; font-weight: bold;">new</span> Symfony\Bundle\AsseticBundle\AsseticBundle<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
        <span style="color: #000000; font-weight: bold;">new</span> Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
        <span style="color: #000000; font-weight: bold;">new</span> JMS\AopBundle\JMSAopBundle<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
        <span style="color: #000000; font-weight: bold;">new</span> JMS\SecurityExtraBundle\JMSSecurityExtraBundle<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
        <span style="color: #000000; font-weight: bold;">new</span> Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
    <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">in_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getEnvironment</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'dev'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'test'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$bundles</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Symfony\Bundle\WebProfilerBundle\WebProfilerBundle<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$bundles</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #b1b100;">return</span> <span style="color: #000088;">$bundles</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Aggiornamento: si può adattare facilmente <code>app/bootstrap.php.cache</code> con il comando</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">php .<span style="color: #000000; font-weight: bold;">/</span>vendor<span style="color: #000000; font-weight: bold;">/</span>bundles<span style="color: #000000; font-weight: bold;">/</span>Sensio<span style="color: #000000; font-weight: bold;">/</span>Bundle<span style="color: #000000; font-weight: bold;">/</span>DistributionBundle<span style="color: #000000; font-weight: bold;">/</span>Resources<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>build_bootstrap.php</pre></div></div>

<div class='wpfblike' style='height: 40px;'><fb:like href='http://www.symfony.it/articoli/520/usare-symfony2-con-subversion/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>]]></content:encoded>
			<wfw:commentRss>http://www.symfony.it/articoli/520/usare-symfony2-con-subversion/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>La documentazione italiana di Symfony2</title>
		<link>http://www.symfony.it/articoli/511/la-documentazione-italiana-di-symfony2/</link>
		<comments>http://www.symfony.it/articoli/511/la-documentazione-italiana-di-symfony2/#comments</comments>
		<pubDate>Sat, 03 Sep 2011 14:06:56 +0000</pubDate>
		<dc:creator>Massimiliano Arione</dc:creator>
				<category><![CDATA[documentazione]]></category>
		<category><![CDATA[symfony2]]></category>

		<guid isPermaLink="false">http://www.symfony.it/?p=511</guid>
		<description><![CDATA[Tradizionalmente, la nostra comunità è sempre stata molto attiva nella traduzione della documentazione. Questo ci ha permesso di avere a disposizione tutti i documenti relativi a symfony 1.x tradotta nella nostra lingua. Ora è arrivato il momento di lavorare sulla corposa documentazione di Symfony2. Le modalità, come forse saprete, sono molto cambiate rispetto al passato, [...]]]></description>
			<content:encoded><![CDATA[<p>Tradizionalmente, la nostra comunità è sempre stata molto attiva nella traduzione della documentazione. Questo ci ha permesso di avere a disposizione tutti i documenti relativi a symfony 1.x tradotta nella nostra lingua.<br />
Ora è arrivato il momento di lavorare sulla corposa documentazione di Symfony2.<br />
Le modalità, come forse saprete, sono molto cambiate rispetto al passato, soprattutto per la decisione di non ospitare sul sito ufficiale nessuna traduzione che non sia completa e aggiornata. Per questo abbiamo deciso di ospitare temporaneamente la versione nostrana qui su symfony.it, precisamente su <a href="http://docs.symfony.it" title="Documentazione italiana di Symfony2">docs.symfony.it</a>, in modo da renderla immediatamente disponibile a tutti.<br />
Qualunque contribuito è ben accetto: la gestione del team dei traduttori è sul nostro gruppo Google, in un <a href="https://groups.google.com/d/msg/symfony-it/_jU-mv2OTi8/dET7ejoW30sJ">apposito topic</a>.</p>
<div class='wpfblike' style='height: 40px;'><fb:like href='http://www.symfony.it/articoli/511/la-documentazione-italiana-di-symfony2/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>]]></content:encoded>
			<wfw:commentRss>http://www.symfony.it/articoli/511/la-documentazione-italiana-di-symfony2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Richiamare il &#8220;nonno&#8221; di una classe</title>
		<link>http://www.symfony.it/articoli/502/richiamare-il-nonno-di-una-classe/</link>
		<comments>http://www.symfony.it/articoli/502/richiamare-il-nonno-di-una-classe/#comments</comments>
		<pubDate>Thu, 07 Jul 2011 12:44:27 +0000</pubDate>
		<dc:creator>Massimiliano Arione</dc:creator>
				<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://www.symfony.it/?p=502</guid>
		<description><![CDATA[Capita spesso in symfony, in cui l&#8217;ereditarietà è usata pesantemente, di dover sovrascrivere un metodo. A volte purtroppo questo metodo è a sua volta un override di un metodo della propria classe padre, come nel seguente esempio: 1 2 3 4 5 6 // funzione originale public function pippo&#40;&#41; &#123; parent:pippo&#40;&#41; // ecc. ecc. &#125; [...]]]></description>
			<content:encoded><![CDATA[<p>Capita spesso in symfony, in cui l&#8217;ereditarietà è usata pesantemente, di dover sovrascrivere un metodo.<br />
A volte purtroppo questo metodo è a sua volta un override di un metodo della propria classe padre, come nel seguente esempio:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// funzione originale</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> pippo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  parent<span style="color: #339933;">:</span>pippo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
  <span style="color: #666666; font-style: italic;">// ecc. ecc.</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Se siamo in un caso come questo e ci serve sovrascrivere la funzione <code>pippo()</code>, non possiamo ricorrere a <code>parent::</code>, perché richiamerebbe appunto la funzione che vogliamo aggirare. La soluzione è tanto semplice quanto efficace:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// nostra funzione di override</span>
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> pippo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  <span style="color: #990000;">call_user_func</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">get_parent_class</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">get_parent_class</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'pippo'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #666666; font-style: italic;">// ecc. ecc.</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>In questo modo possiamo richiamare direttamente il <em>nonno</em> della nostra classe, invece del <em>padre</em> <img src='http://www.symfony.it/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class='wpfblike' style='height: 40px;'><fb:like href='http://www.symfony.it/articoli/502/richiamare-il-nonno-di-una-classe/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>]]></content:encoded>
			<wfw:commentRss>http://www.symfony.it/articoli/502/richiamare-il-nonno-di-una-classe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Niente calendario dell&#8217;avvento per il 2010</title>
		<link>http://www.symfony.it/articoli/381/niente-calendario-dellavvento-per-il-2010/</link>
		<comments>http://www.symfony.it/articoli/381/niente-calendario-dellavvento-per-il-2010/#comments</comments>
		<pubDate>Tue, 30 Nov 2010 09:17:54 +0000</pubDate>
		<dc:creator>Massimiliano Arione</dc:creator>
				<category><![CDATA[documentazione]]></category>

		<guid isPermaLink="false">http://www.symfony.it/?p=381</guid>
		<description><![CDATA[Purtroppo quest&#8217;anno salterà l&#8217;ormai tradizionale occasione del calendario dell&#8217;avvento. Lo stesso Fabien ha confermato che, essendo lo sviluppo di Symfony2 ancora pressante e mancando ancora molta documentazione, non avrebbe senso. Probabilmente l&#8217;ipotesi di basarlo sulla versione 1 non è stata nemmeno presa in considerazione. Un vero peccato: ricordiamo come la comunità italiana di symfony sia [...]]]></description>
			<content:encoded><![CDATA[<p>Purtroppo quest&#8217;anno salterà l&#8217;ormai tradizionale occasione del calendario dell&#8217;avvento. Lo stesso Fabien ha confermato che, essendo lo sviluppo di Symfony2 ancora pressante e mancando ancora molta documentazione, non avrebbe senso. Probabilmente l&#8217;ipotesi di basarlo sulla versione 1 non è stata nemmeno presa in considerazione.<br />
Un vero peccato: ricordiamo come la comunità italiana di symfony sia praticamente nata con il calendario dell&#8217;avvento del 2008 e si sia fortemente impegnata anche per quello del 2009. Sarà per l&#8217;anno prossimo.</p>
<div class='wpfblike' style='height: 40px;'><fb:like href='http://www.symfony.it/articoli/381/niente-calendario-dellavvento-per-il-2010/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>]]></content:encoded>
			<wfw:commentRss>http://www.symfony.it/articoli/381/niente-calendario-dellavvento-per-il-2010/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>task con progress bar</title>
		<link>http://www.symfony.it/articoli/376/task-con-progress-bar/</link>
		<comments>http://www.symfony.it/articoli/376/task-con-progress-bar/#comments</comments>
		<pubDate>Fri, 19 Nov 2010 10:30:10 +0000</pubDate>
		<dc:creator>Massimiliano Arione</dc:creator>
				<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://www.symfony.it/?p=376</guid>
		<description><![CDATA[A volte può capitare di dover eseguire dei task che durano diversi minuti, per esempio per delle importazioni o per delle conversioni di grandi quantità di dati. In questi casi può essere molto utile avere nel terminale una barra di progressione, che indichi le quantità dei dati già lavorati e ancora da lavorare. Questa piccola [...]]]></description>
			<content:encoded><![CDATA[<p>A volte può capitare di dover eseguire dei task che durano diversi minuti, per esempio per delle importazioni o per delle conversioni di grandi quantità di dati. In questi casi può essere molto utile avere nel terminale una barra di progressione, che indichi le quantità dei dati già lavorati e ancora da lavorare.<br />
Questa piccola classe è stata scritta per sfruttare l&#8217;ottimo pacchetto <a href="http://pear.php.net/package/Console_ProgressBar">Console_ ProgressBar di PEAR</a> (non reinventare la ruota!)</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
 * progressbar task
 *
 * PEAR's Console_ProgressBar is required.
 * If Console_ProgressBar is not installed, no bar is displayed and no error is given
 * @see http://pear.php.net/package/Console_ProgressBar
 *
 * Usage: extend this class instead of sfBaseTask in your task.
 *        in your execute() method, call $this-&gt;init() and then other methods
 *        where appropriate.
 *
 * @author  Massimiliano Arione
 */</span>
abstract <span style="color: #000000; font-weight: bold;">class</span> progressbarTask <span style="color: #000000; font-weight: bold;">extends</span> sfBaseTask
<span style="color: #009900;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">protected</span>
    <span style="color: #000088;">$bar</span><span style="color: #339933;">,</span>
    <span style="color: #000088;">$hasBar</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #009933; font-style: italic;">/**
   * initialize ProgressBar
   */</span>
  <span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000000; font-weight: bold;">function</span> init<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">hasBar</span> <span style="color: #339933;">=</span> <span style="color: #339933;">@</span><span style="color: #b1b100;">include_once</span> <span style="color: #0000ff;">'Console/ProgressBar.php'</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #009933; font-style: italic;">/**
   * start bar
   * @param integer $count total number of items
   */</span>
  <span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000000; font-weight: bold;">function</span> start<span style="color: #009900;">&#40;</span><span style="color: #000088;">$count</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">hasBar</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
      <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">bar</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Console_ProgressBar<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'[%bar%] %percent% %elapsed%'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'=&gt;'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">' '</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">90</span><span style="color: #339933;">,</span> <span style="color: #000088;">$count</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #009933; font-style: italic;">/**
   * update the bar
   * @param integer $step
   */</span>
  <span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000000; font-weight: bold;">function</span> update<span style="color: #009900;">&#40;</span><span style="color: #000088;">$step</span><span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">hasBar</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
      <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">bar</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">update</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$step</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #009933; font-style: italic;">/**
   * erase the bar
   */</span>
  <span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000000; font-weight: bold;">function</span> erase<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">hasBar</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
      <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">bar</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">erase</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">log</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>L&#8217;utilizzo è molto semplice: basta richiamare il metodo init(), quindi ogni volta che serve barra di progressione richiamare start(), update() ed erase() rispettivamente prima, durante e dopo il ciclo. Al metodo update() va passato un contatore, che deve essere incrementato nel ciclo stesso.</p>
<div class='wpfblike' style='height: 40px;'><fb:like href='http://www.symfony.it/articoli/376/task-con-progress-bar/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>]]></content:encoded>
			<wfw:commentRss>http://www.symfony.it/articoli/376/task-con-progress-bar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Basic authentication</title>
		<link>http://www.symfony.it/articoli/316/basic-authentication/</link>
		<comments>http://www.symfony.it/articoli/316/basic-authentication/#comments</comments>
		<pubDate>Fri, 17 Sep 2010 09:23:59 +0000</pubDate>
		<dc:creator>Massimiliano Arione</dc:creator>
				<category><![CDATA[tips]]></category>
		<category><![CDATA[varie]]></category>

		<guid isPermaLink="false">http://www.symfony.it/?p=316</guid>
		<description><![CDATA[Può capitare di avere un progetto in symfony che non prevede utenti, ma che ha comunque un&#8217;interfaccia di amministrazione. In questo caso, vale la pena installare sfGuardPlugin solo per far accedere un singolo utente? Ovviamente no. Vediamo allora come risolvere il problema in modo semplice ed elegante. Supponiamo di trovarci in una configurazione standard, con [...]]]></description>
			<content:encoded><![CDATA[<p>Può capitare di avere un progetto in symfony che non prevede utenti, ma che ha comunque un&#8217;interfaccia di amministrazione. In questo caso, vale la pena installare sfGuardPlugin solo per far accedere un singolo utente? Ovviamente no.<br />
Vediamo allora come risolvere il problema in modo semplice ed elegante.<br />
Supponiamo di trovarci in una configurazione standard, con l&#8217;opzione security attivata per l&#8217;applicazione backend, e di avere a disposizione un modulo chiamato &#8220;default&#8221;. Se si preferisce un modulo diverso, occorre configurare opportunamente il file settings.yml per farvi puntare il login. Il primo passo consiste nell&#8217;aggiungere una rotta in routing.yml:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="yml" style="font-family:monospace;">login:
  url:   /login
  param: { module: default, action: login }</pre></td></tr></table></div>

<p>Inseriamo poi le credenziali dell&#8217;utente che deve accedere al backend, nel file app.yml dell&#8217;applicazione:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="yml" style="font-family:monospace;">all:
  admin_user:     admin
  # qui conviene mettere una password migliore :-)
  admin_password: admin</pre></td></tr></table></div>

<p>Basterà quindi inserire la sequente azione nel modulo default:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> executeLogin<span style="color: #009900;">&#40;</span>sfWebRequest <span style="color: #000088;">$request</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getUser</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">isAuthenticated</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">redirect</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'@homepage'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'PHP_AUTH_USER'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'PHP_AUTH_USER'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> sfConfig<span style="color: #339933;">::</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'app_admin_user'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span>
        <span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'PHP_AUTH_PW'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> sfConfig<span style="color: #339933;">::</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'app_admin_password'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
      <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getUser</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setAuthenticated</span><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
      <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">redirect</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$request</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getUri</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getResponse</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setStatusCode</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">401</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getResponse</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setHttpHeader</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'WWW_Authenticate'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Basic realm=&quot;Authentication required&quot;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #b1b100;">return</span> sfView<span style="color: #339933;">::</span><span style="color: #004000;">NONE</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>E il gioco è fatto. Eventualmente si può personalizzare il messaggio &#8220;Authentication required&#8221;.<br />
Nei test funzionali, sarà possibile effettuare il login usando il metodo setAuth(), con l&#8217;accortezza di seguire il redirect dopo il primo get.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$browser</span><span style="color: #339933;">-&gt;</span>
  <span style="color: #004000;">setAuth</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'admin'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'admin'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span>
  <span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span>
  <span style="color: #004000;">with</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'response'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">isRedirected</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">followRedirect</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span>
 <span style="color: #666666; font-style: italic;">// eccetera...</span></pre></td></tr></table></div>

<div class='wpfblike' style='height: 40px;'><fb:like href='http://www.symfony.it/articoli/316/basic-authentication/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>]]></content:encoded>
			<wfw:commentRss>http://www.symfony.it/articoli/316/basic-authentication/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Testare più email contemporaneamente</title>
		<link>http://www.symfony.it/articoli/260/testare-piu-email-contemporaneamente/</link>
		<comments>http://www.symfony.it/articoli/260/testare-piu-email-contemporaneamente/#comments</comments>
		<pubDate>Fri, 28 May 2010 09:38:54 +0000</pubDate>
		<dc:creator>fullo</dc:creator>
				<category><![CDATA[symfony]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[functional]]></category>
		<category><![CDATA[mail]]></category>
		<category><![CDATA[sfTestMailer]]></category>
		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://www.symfony.it/?p=260</guid>
		<description><![CDATA[Può capitare di inviare dalla stessa action diverse email, ad esempio per notificare un amministratore di un determinato evento e contemporaneamente per dare feedback all&#8217;utente che l&#8217;ha scatenato. In questi casi sfTesterMailer, che con il metodo withMessage(), ci viene incontro dandoci la possibilità di filtrare, filtrando per destinatario, l&#8217;email che vogliamo testare. Supponiamo ad esempio [...]]]></description>
			<content:encoded><![CDATA[<p>Può capitare di inviare dalla stessa <code>action</code> diverse email, ad esempio per notificare un amministratore di un determinato evento e contemporaneamente per dare feedback all&#8217;utente che l&#8217;ha scatenato.</p>
<p>In questi casi <code>sfTesterMailer</code>, che con il metodo <code>withMessage()</code>, ci viene incontro dandoci la possibilità di filtrare, filtrando per destinatario, l&#8217;email che vogliamo testare.</p>
<p>Supponiamo ad esempio di aver spedito due email, una a admin@example.org e l&#8217;altra ad user@example.org in questo ordine. </p>
<p>Il test funzionale corrispondente sarà:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">with<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'mailer'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">begin</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span>
  <span style="color: #004000;">hasSent</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span>
  <span style="color: #004000;">checkHeader</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'to'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'/admin@example.org/'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span>
  <span style="color: #004000;">withMessage</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'user@example.org'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span>
  <span style="color: #004000;">checkHeader</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'to'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'/user@example.org/'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span>
<span style="color: #990000;">end</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Inoltre il metodo <code>withMessage()</code> ci permette anche di ciclare all&#8217;interno dei messaggi, usando un secondo parametro denominato <code>$position</code>, casomai i messaggi inviati all&#8217;utente siano più di uno.</p>
<div class='wpfblike' style='height: 40px;'><fb:like href='http://www.symfony.it/articoli/260/testare-piu-email-contemporaneamente/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>]]></content:encoded>
			<wfw:commentRss>http://www.symfony.it/articoli/260/testare-piu-email-contemporaneamente/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>La documentazione di symfony migra a git</title>
		<link>http://www.symfony.it/articoli/248/la-documentazione-di-symfony-migra-a-git/</link>
		<comments>http://www.symfony.it/articoli/248/la-documentazione-di-symfony-migra-a-git/#comments</comments>
		<pubDate>Fri, 02 Apr 2010 11:48:47 +0000</pubDate>
		<dc:creator>Massimiliano Arione</dc:creator>
				<category><![CDATA[documentazione]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://www.symfony.it/?p=248</guid>
		<description><![CDATA[La documentazione ufficiale di symfony (versioni 1.3 e 1.4) è stata migrata dallo storico repository subversion a un nuovo repository distribuito basato su git. Questo vuol dire che sarà molto più semplice contribuire alla documentazione, non essendo più necessario richiedere le credenziali di accesso: basterà fare un fork del progetto, inserire i propri contributi e [...]]]></description>
			<content:encoded><![CDATA[<p>La documentazione ufficiale di symfony (versioni 1.3 e 1.4) è stata migrata dallo storico repository subversion a un nuovo repository distribuito basato su <a href="http://github.com/symfony/symfony1-docs">git</a>. Questo vuol dire che sarà molto più semplice contribuire alla documentazione, non essendo più necessario richiedere le credenziali di accesso: basterà fare un fork del progetto, inserire i propri contributi e infine proporre un pull nel master.</p>
<div class='wpfblike' style='height: 40px;'><fb:like href='http://www.symfony.it/articoli/248/la-documentazione-di-symfony-migra-a-git/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>]]></content:encoded>
			<wfw:commentRss>http://www.symfony.it/articoli/248/la-documentazione-di-symfony-migra-a-git/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
