VichUploaderBundle, file upload con doctrine

L’ upload di file è una delle necessità più comuni di un’applicazione web. La documentazione ufficiale copre l’argomento in maniera piuttosto chiara, trattando sia l’upload di file generico che quello di file legati ad un’entità doctrine. In particolare quest’ultimo è probabilmente il caso più comune dato che, nella maggioranza dei casi, vorrai avere su database un riferimento al file caricato.

La procedura descritta nel cookbook è assolutamente corretta, ma l’utilizzo del bundle VichUploaderBundle rende il tutto più efficace e risolve, abbastanza bene, anche un paio di problemi. Ecco la mia esperienza con questo bundle.

Continue reading this post »

Velocizzare i test usando un RAM Disk

Dato che la RAM costa relativamente poco e il tempo invece è merce rara, mi pare una buona idea “investire” un po’ di RAM per risparmiare tempo. Se lavorate con una suite di test automatici probabilmente questa girerà decine di volte al giorno (forse addirittura all’ora) facendo una serie di operazioni su disco che, probabilmente, avranno un peso significativo sul tempo di esecuzione finale. Montando una porzione di RAM e utilizzandola come FS si può velocizzare l’esecuzione dei test.

Continue reading this post »

Documentazione ufficiale italiana di Symfony 2.0

Il team di traduzione italiano, ancora una volta, è riuscito a tradurre per primo la corposa documentazione di Symfony2, che ora è finalmente disponibile sul sito ufficiale. Ci sono ancora alcuni dettagli da definire, come per esempio i collegamenti nel menù non ancora tradotti, ma ci stanno lavorando. Nel frattempo, grazie al contributo di Vittore Zen, è anche disponibile il file PDF della medesima documentazione.
AGGIORNAMENTO: un PDF ufficiale, anche separato per sezioni, è ora disponibile in Italiano sul sito ufficiale.

Symfony Live 2012

sflive È stato appena annunciato su twitter che l’edizione 2012 della nota conferenza Symfony Live si terrà un po’ più tardi, a giugno, esattamente il 7 e l’8, con la consueta giornata di workshop il giorno precedente e un hacking day il giorno successivo. Speriamo di vedere presto aperto il call for paper!

Utilizzare le Estensioni di Doctrine in progetti symfony2

Doctrine prevede un set di eventi che permettono di modificarne ed estenderne il comportamento. Tramite l’utilizzo di questi eventi è possibile implementare nuove funzionalità non previste dall’ ORM. Sfruttando questa potenzialità è stato creato un set di estensioni per mettere a disposizione degli sviluppatori alcuni comportamenti di uso comune. L’integrazione all’interno di symfony2 è facilitata dal bundle StofDoctrineExtensionsBundle.

Continue reading this post »

Abilitare estensioni aggiuntive per Twig

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’utente di attivarle manualmente, vediamo come. Continue reading this post »

Un piccolo problema con Symfony2 e PHPUnit 3.6

Se usate Symfony2 (al momento fino alla versione 2.0.5) e aggiornate PHPUnit alla recente versione 3.6, probabilmente avrete delle eccezioni in test che fino a un attimo prima erano verdi.
Il bug è noto e spiegato in dettaglio sul repo di PHPUnit, in cui si trova anche un semplice, ma efficace, rimedio, in attesa che si mettano d’accordo su chi deve fixare cosa ;)

Usare Symfony2 con subversion

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’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 un accenno, purtroppo senza addentrarsi nei dettagli.
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 vendor di Symfony2 non sia presente (per esempio, perché il repository contiene uno scheletro di progetto simile a quello della Standard Edition senza venditori).
La prima cosa da fare è aggiungere i vari bundle e le altre dipendenza in externals:

mkdir vendor
svn pe svn:externals vendor

Nella finestra dell’editor, inserire le seguenti righe:

symfony              http://svn.github.com/symfony/symfony.git
twig                 http://svn.github.com/fabpot/Twig.git
monolog              http://svn.github.com/Seldaek/monolog.git
doctrine-common      http://svn.github.com/doctrine/common.git
doctrine-dbal        http://svn.github.com/doctrine/dbal.git
doctrine             http://svn.github.com/doctrine/doctrine2.git
swiftmailer          http://svn.github.com/swiftmailer/swiftmailer.git
assetic              http://svn.github.com/kriswallsmith/assetic.git
twig-extensions      http://svn.github.com/fabpot/Twig-extensions.git
metadata             http://svn.github.com/schmittjoh/metadata.git
 
doctrine-extensions  http://svn.github.com/l3pp4rd/DoctrineExtensions.git
 
bundles/Stof/DoctrineExtensionsBundle       http://svn.github.com/stof/StofDoctrineExtensionsBundle.git
 
bundles/Sensio/Bundle/FrameworkExtraBundle  http://svn.github.com/sensio/SensioFrameworkExtraBundle.git
bundles/Sensio/Bundle/DistributionBundle    http://svn.github.com/sensio/SensioDistributionBundle.git
bundles/Sensio/Bundle/GeneratorBundle       http://svn.github.com/sensio/SensioGeneratorBundle.git
bundles/JMS/SecurityExtraBundle             http://svn.github.com/schmittjoh/JMSSecurityExtraBundle.git
 
cg-library                                  http://svn.github.com/schmittjoh/cg-library.git
bundles/JMS/AopBundle                       http://svn.github.com/schmittjoh/JMSAopBundle.git
 
symfony/src/Symfony/Bundle/AsseticBundle    http://svn.github.com/symfony/AsseticBundle.git

Si noti che sono stati aggiunti, oltre ai bundle di base, alcuni altri bundle utili.
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 master, quindi le versioni in sviluppo. Se quindi si riscontrano errori o eccezioni dovuti per esempio a metodi mancanti, si verifichi che il file app/bootstrap.php.cache contenga tutto ciò che è necessario. Ovviamente, va adattato anche il file relativo all’autoload:

// app/autoload.php
$loader->registerNamespaces(array(
    'Symfony'          => array(__DIR__.'/../vendor/symfony/src', __DIR__.'/../vendor/bundles'),
    'Sensio'           => __DIR__.'/../vendor/bundles',
    'JMS'              => __DIR__.'/../vendor/bundles',
    'CG'               => __DIR__.'/../vendor/cg-library/src',
    'Doctrine\\Common' => __DIR__.'/../vendor/doctrine-common/lib',
    'Doctrine\\DBAL'   => __DIR__.'/../vendor/doctrine-dbal/lib',
    'Doctrine'         => __DIR__.'/../vendor/doctrine/lib',
    'Monolog'          => __DIR__.'/../vendor/monolog/src',
    'Assetic'          => __DIR__.'/../vendor/assetic/src',
    'Metadata'         => __DIR__.'/../vendor/metadata/src',
    'Gedmo'            => __DIR__.'/../vendor/doctrine-extensions/lib',
    'Stof'             => __DIR__.'/../vendor/bundles',
));

e anche quello relativo all’attivazione dei bundle:

// app/AppKernel.php
public function registerBundles()
{
    $bundles = array(
        new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
        new Symfony\Bundle\SecurityBundle\SecurityBundle(),
        new Symfony\Bundle\TwigBundle\TwigBundle(),
        new Symfony\Bundle\MonologBundle\MonologBundle(),
        new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
        new Symfony\Bundle\DoctrineBundle\DoctrineBundle(),
        new Symfony\Bundle\AsseticBundle\AsseticBundle(),
        new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
        new JMS\AopBundle\JMSAopBundle(),
        new JMS\SecurityExtraBundle\JMSSecurityExtraBundle(),
        new Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle(),
    );
 
    if (in_array($this->getEnvironment(), array('dev', 'test'))) {
        $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
        $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
    }
 
    return $bundles;
}

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

php ./vendor/bundles/Sensio/Bundle/DistributionBundle/Resources/bin/build_bootstrap.php

La documentazione italiana di Symfony2

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, 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 docs.symfony.it, in modo da renderla immediatamente disponibile a tutti.
Qualunque contribuito è ben accetto: la gestione del team dei traduttori è sul nostro gruppo Google, in un apposito topic.

Symfony 2.0, finalmente!

Dopo un parto veramente travagliato, è finalmente nato oggi Symfony 2.0!
L’annuncio è stato dato sul blog ufficiale, al quale rimandiamo per i numerosi dettagli.
Ora sarebbe quasi il caso di riprendere la traduzione in Italiano del manuale, che era stata volenterosamente avviata alcuni mesi fa e poi purtroppo abbandonata. Ogni contributo è ben accetto.