SlideShare ist ein Scribd-Unternehmen logo
1 von 64
Downloaden Sie, um offline zu lesen
http://traintosymfony.com1
Emanuele Gaspari
TRAIN
TO SYMFONY
Verona, 13•14 Aprile 2013
the frameworkshop
http://traintosymfony.com
@TrainToSymfony
Media partner:
Symfony (1/3)
http://traintosymfony.com2
Emanuele Gaspari
about me
creatore di SymfonyBricks
Emanuele Gaspari
ultimo sito pubblicato (copiaincolla): www.ilovesanmartino.it
4 bundles
21 controllers
6 services
9 entities
5 repositories custom
4 estensioni twig
14 macros
10 bundles aggiuntivi
(FOSUserBundle, FOSJsRoutingBundle, KnpPaginatorBundle, CopiaincollaMetaTagsBundle, etc..)
co-sviluppatore di CopiaincollaMetaTagsBundle https://github.com/copiaincolla/MetaTagsBundle
https://symfonybricks.com
inmarelibero@gmail.com @inmarelibero
http://traintosymfony.com3
Emanuele Gaspari
prima parte:
familiarità con i concetti di Symfony
Symfony: teoria e codice
Routing Templatingoverview
http://traintosymfony.com4
Emanuele Gaspari
intro
Symfony2: what?
usare un framework
Symfony internals
namespaces
Request e Response
Front Controller
flusso di un'applicazione
HTTP
Routing
clean urls
Routes in Symfony
Templating
TWIG
risposta HTML
OVERVIEW
http://traintosymfony.com5
Emanuele Gaspari
un po' di storia
S 1.0 → gennaio 2007
S 1.2 → novembre 2008
S 1.4 → novembre 2009
S 2.0 → luglio 2011
S 2.1 → settembre 2012
S 2.2 → marzo 2013
S 2.3 → maggio 2013 (LTS)
Symfonyis a trademark of Fabien Potencier. All rights reserved.
http://traintosymfony.com6
Emanuele Gaspari
def.
Symfony2 è un insieme di componenti PHP riutilizzabili e indipendenti
che risolvono problemi frequenti di sviluppo.
Symfony Standard Distribution
http://fabien.potencier.org/article/49/what-is-symfony2, 25 Ottobre 2011 http://symfony.com/it/doc/current/book/http_fundamentals.html
Sulla base di questi componenti, Symfony2 è anche un framework completo.
http://traintosymfony.com7
Emanuele Gaspari
gli attrezzi
Symfony è una cassetta degli attrezzi
http://traintosymfony.com8
Emanuele Gaspari
Symfony fornisce degli (ottimi) strumenti
per gestire (molti) problemi ricorrenti
persistenza dei dati sicurezza form
validazione templating configurazione
logging gestione degli assets routing
traduzioni serializzazione console tasks
caching invio di email etc...
problemi ricorrenti
http://traintosymfony.com9
Emanuele Gaspari
a noi resta solo il divertimento
yeah!
http://traintosymfony.com10
Emanuele Gaspari
intro
Symfony2: what?
usare un framework
Symfony internals
namespaces
Request e Response
Front Controller
flusso di un'applicazione
HTTP
Routing
clean urls
Routes in Symfony
Templating
TWIG
risposta HTML
OVERVIEW
http://traintosymfony.com11
Emanuele Gaspari
framework, #Symfony
perché un framework
●
codice coperto da test
(security audit 2011, 9.500 euro
per testare Symfony2, Doctrine e Twig)
●
flessibile
●
sicuro
●
è strutturato
●
manutenibile, sviluppo in team
●
aggiornabile
●
concentrarsi sul “business value”
●
codice di qualità
perché Symfony
●
Stable API
●
Long term support
(S2.3 supportata fino al 2016)
●
community e risorse
http://traintosymfony.com12
Emanuele Gaspari
non occuparsi di task ripetitivi
offrire strumenti opzionali
per risolvere
problemi complessi
goals
http://traintosymfony.com13
Emanuele Gaspari
intro
Symfony2: what?
usare un framework
Symfony internals
namespaces
Request e Response
Front Controller
flusso di un'applicazione
HTTP
Routing
clean urls
Routes in Symfony
Templating
TWIG
risposta HTML
OVERVIEW
http://traintosymfony.com14
Emanuele Gaspari
in Symfony ogni cosa è un bundle
funzionalità del core
codice di terze parti
codice dell'applicazione
“In Symfony2, bundles are first-class citizens that are so
flexible that even core code itself is a bundle.”
http://symfony.com/doc/master/cookbook/symfony1.html
everything is a bundle
http://traintosymfony.com15
Emanuele Gaspari
un bundle è una cartella
che contiene codice PHP
può ospitare qualsiasi cosa
●
controllers
●
templates
●
assets javascript, css, immagini
●
classi varie
●
...
ha una struttura ben definita,
che all'occorrenza può essere
personalizzata
(vedi KnpRadBundle, http://rad.knplabs.com)
https://github.com/inmarelibero/SymfonyBricks
organizzazione di un bundle
http://traintosymfony.com16
Emanuele Gaspari
il core di Symfony e tutti i bundles aggiunti
successivamente vengono gestiti attraverso
Composer
$ php composer.phar install$ php composer.phar install
$ php composer.phar update$ php composer.phar update
il file vendor/autoload.php carica in Symfony tutte le librerie installate
http://getcomposer.org
e installati nella cartella /vendor
vendor
http://traintosymfony.com17
Emanuele Gaspari
core
componenti librerie esterne bundles
Config
Console
Form
HttpFoundation
HttpKernel
Locale
Routing
Security
Templating
Translation
Validator
Yaml
Doctrine ORM
SwiftMailer
Twig
SensioFrameworkExtraBundle
SensioGeneratorBundle
JMSSecurityExtraBundle
DoctrineFixturesBundle
DoctrineMigrationsBundle
DoctrineMongoDBBundle
il core di Symfony (elenco ampiamente parziale)
http://traintosymfony.com18
Emanuele Gaspari
configurazione
componenti di Symfony
librerie di terze parti
organizzato in bundles
bundles dell'utente
document root dell'applicazione
controllers
templates, javascript, css
front controllers
struttura di un'applicazione
http://traintosymfony.com19
Emanuele Gaspari
intro
Symfony2: what?
usare un framework
Symfony internals
namespaces
Request e Response
Front Controller
flusso di un'applicazione
HTTP
Routing
clean urls
Routes in Symfony
Templating
TWIG
risposta HTML
OVERVIEW
http://traintosymfony.com20
Emanuele Gaspari
PHP 5.3
S 2.0 >= 5.3.2
S 2.1 >= 5.3.3
S 2.2 >= 5.3.3
PHP 5.3.0 è stato rilasciato nel giugno 2009
namespaces
funzioni lambda/closures
garbage collection
Symfony2 richiede come minimo
la versione 5.3.2 di PHP
http://traintosymfony.com21
Emanuele Gaspari
# /var/www/vhosts/traintosymfony/src/Foo/BarBundle/Controller/DefaultController.php
<?php
namespace FooBarBundleController;
use SymfonyBundleFrameworkBundleControllerController;
use SymfonyComponentHttpFoundationResponse;
class DefaultController extends Controller
{
public function indexAction()
{
return new Response("Hello");
}
}
# /var/www/vhosts/traintosymfony/src/Foo/BarBundle/Controller/DefaultController.php
<?php
namespace FooBarBundleController;
use SymfonyBundleFrameworkBundleControllerController;
use SymfonyComponentHttpFoundationResponse;
class DefaultController extends Controller
{
public function indexAction()
{
return new Response("Hello");
}
}
PSR-0
https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md
namespaces
/var/www/vhosts/traintosymfony/src/Foonamespace Foo
http://traintosymfony.com22
Emanuele Gaspari
intro
Symfony2: what?
usare un framework
Symfony internals
namespaces
Request e Response
Front Controller
flusso di un'applicazione
HTTP
Routing
clean urls
Routes in Symfony
Templating
TWIG
risposta HTML
OVERVIEW
http://traintosymfony.com23
Emanuele Gaspari
il nostro lavoro
il nostro lavoro è quello di sviluppare
applicazioni web
che gestiscano
richieste HTTP
e producano una
risposta
http://traintosymfony.com24
Emanuele Gaspari
http://traintosymfony.com25
Emanuele Gaspari
help
Symfony ti aiuta esattamente a fare questo
http://traintosymfony.com26
Emanuele Gaspari
intro
Symfony2: what?
usare un framework
Symfony internals
namespaces
Request e Response
Front Controller
flusso di un'applicazione
HTTP
Routing
clean urls
Routes in Symfony
Templating
TWIG
risposta HTML
OVERVIEW
http://traintosymfony.com27
Emanuele Gaspari
front controller
il front controller è l'unico punto di accesso all'applicazione dall'esterno
si occupa di fare il bootstrap dell'applicazione (kernel),
interrogare il controller e restituire una risposta
/app.php /app_dev.php
http://traintosymfony.com28
Emanuele Gaspari
intro
Symfony2: what?
usare un framework
Symfony internals
namespaces
Request e Response
Front Controller
flusso di un'applicazione
HTTP
Routing
clean urls
Routes in Symfony
Templating
TWIG
risposta HTML
OVERVIEW
http://traintosymfony.com29
Emanuele Gaspari
flusso di un'applicazione Symfony 1/3
il client invia una richiesta che viene ricevuta dal Front Controller (app.php)
il front controller crea e gestisce un oggetto di tipo Request
http://traintosymfony.com30
Emanuele Gaspari
flusso di un'applicazione Symfony 2/3
attraverso il sistema di Routing, Symfony individua
un Controller e una Action da eseguire a seconda dell'url
http://traintosymfony.com31
Emanuele Gaspari
flusso di un'applicazione Symfony 3/3
viene eseguita un'azione, che restituisce una risposta al client (html, xml, json)
le azioni restituiscono SEMPRE un oggetto di tipo Response
http://traintosymfony.com32
Emanuele Gaspari
flusso completo
richiesta
bootstrap (del kernel)
dell'applicazione
Symfony
Front Controller
(app.php)
Controller risposta
browser browser
http://traintosymfony.com33
Emanuele Gaspari
# /var/www/vhosts/traintosymfony/web/app.php
<?php
use SymfonyComponentHttpFoundationRequest;
$loader = require_once __DIR__.'/../app/bootstrap.php.cache';
require_once __DIR__.'/../app/AppKernel.php';
$kernel = new AppKernel('prod', false);
$kernel->loadClassCache();
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);
# /var/www/vhosts/traintosymfony/web/app.php
<?php
use SymfonyComponentHttpFoundationRequest;
$loader = require_once __DIR__.'/../app/bootstrap.php.cache';
require_once __DIR__.'/../app/AppKernel.php';
$kernel = new AppKernel('prod', false);
$kernel->loadClassCache();
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);
il Front Controller gestisce la richiesta: il metodo handle()
kernel handle
http://traintosymfony.com34
Emanuele Gaspari
http://traintosymfony.com35
Emanuele Gaspari
facciamo il punto
creare una Route che associ un url ad un'azione contenuta in un Controller
fare in modo che l'azione restituisca una risposta, tipicamente dopo aver
eseguito delle operazioni
se la risposta è html, stampare un template TWIG
http://traintosymfony.com36
Emanuele Gaspari
intro
Symfony2: what?
usare un framework
Symfony internals
namespaces
Request e Response
Front Controller
flusso di un'applicazione
HTTP
Routing
clean urls
Routes in Symfony
Templating
TWIG
risposta HTML
OVERVIEW
http://traintosymfony.com37
Emanuele Gaspari
HTTP
HTTP
non importa con quali strumenti e in che modo sviluppi per il web,
l'obiettivo è SEMPRE
di interpretare una richiesta e fornire una risposta
linguaggio testuale che permette a due macchine di comunicare
1.1 RFC 2616/1999
http://traintosymfony.com38
Emanuele Gaspari
lo schema seguente rappresenta tutta la complessità di una richiesta HTTP 1.1
presta molta attenzione
ATTENZIONE!
warning
http://traintosymfony.com39
Emanuele Gaspari
HTTP
richiesta
risposta
client SERVER
The HTTP protocol is a request/response protocol. A client sends a request to the server in the form of a request method, URI, and protocol version,
followed by a MIME-like message containing request modifiers, client information, and possible body content over a connection with a server. The
server responds with a status line, including the message's protocol version and a success or error code, followed by a MIME-like message containing
server information, entity metainformation, and possible entity-body content.
http://tools.ietf.org/html/rfc2068
http://traintosymfony.com40
Emanuele Gaspari
ok, lo sapevo
grazie, lo sapevo già
(o forse no)
http://traintosymfony.com41
Emanuele Gaspari
body
una richiesta HTTP
http://www.symfony.comhttp://www.symfony.com
http://traintosymfony.com42
Emanuele Gaspari
obiettivi
HTTP è uno standard e funziona molto bene
è importante ricordarsi da dove si parte e cosa si vuole ottenere
L'adesione allo standard HTTP è un obiettivo di Symfony2
http://traintosymfony.com43
Emanuele Gaspari
la filosofia
“Symfony è progettato per soddisfare questa realtà.”
"Se Symfony non offrisse altro, avresti comunque un kit di strumenti
per un facile accesso alle informazioni di richiesta
e un'interfaccia object-oriented per la creazione della risposta.
[...] l'obiettivo della tua applicazione è sempre quello di
interpretare una richiesta e creare la risposta appropriata in base alla logica
dell'applicazione."
http://symfony.com/doc/current/book/http_fundamentals.html
http://traintosymfony.com44
Emanuele Gaspari
finora non ho avuto (particolari) problemi con
$_GET, $_SERVER, etc..
perché dovrei usare Symfony per la gestione di ogni richiesta?
Request Response
Symfony modella la richiesta e la risposta HTTP con le due classi PHP
gestire le richieste
http://traintosymfony.com45
Emanuele Gaspari
un solo esempio può essere sufficiente
http://traintosymfony.com46
Emanuele Gaspari
string(35) "it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4"string(35) "it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4"
// Contents of the Accept-Language: header from the current request, if there is one.
$languages = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
var_dump($languages);
// Contents of the Accept-Language: header from the current request, if there is one.
$languages = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
var_dump($languages);
HTTP_ACCEPT_LANGUAGE
http://php.net/manual/en/reserved.variables.server.php
http://traintosymfony.com47
Emanuele Gaspari
array(4) {
[0]=> string(5) "it_IT"
[1]=> string(2) "it"
[2]=> string(5) "en_US"
[3]=> string(2) "en"
}
array(4) {
[0]=> string(5) "it_IT"
[1]=> string(2) "it"
[2]=> string(5) "en_US"
[3]=> string(2) "en"
}
// Gets a list of languages acceptable by the client browser
$languages = $this->getRequest()->getLanguages();
var_dump($languages);
// Gets a list of languages acceptable by the client browser
$languages = $this->getRequest()->getLanguages();
var_dump($languages);
getLanguages()
http://api.symfony.com/2.0/Symfony/Component/HttpFoundation/Request.html#method_getLanguages
http://traintosymfony.com48
Emanuele Gaspari
non re-inventare la ruota
non occuparsi di task ripetitivi
ABOUT: “Freddie Mercury Rage Pose” is a rage comic character made from a photo of the lead vocalist Freddie Mercury. The image is typically used to indicate that an extraordinary
feat has been accomplished, similar to the Fuck Yeah illustration.
Freddie Mercury Rage Pose
http://traintosymfony.com49
Emanuele Gaspari
intro
Symfony2: what?
usare un framework
Symfony internals
namespaces
Request e Response
Front Controller
flusso di un'applicazione
HTTP
Routing
clean urls
Routes in Symfony
Templating
TWIG
risposta HTML
OVERVIEW
http://traintosymfony.com50
Emanuele Gaspari
vorrei mostrare agli utenti dei clean urls (il più possibile)
posizionamento sui motori di ricerca
univocità dell'indirizzo web
gli url “parlanti” migliorano la comunicazione
/prodotto?codice=EG-124 /prodotto/EG-124
clean urls
http://traintosymfony.com51
Emanuele Gaspari
Wordpress dà la possibilità di scegliere il formato dell'url di un post:
wordpress
http://traintosymfony.com52
Emanuele Gaspari
gestire gli url
Come sviluppatore vorrei un (buon) sistema per gestire url “parlanti”
flessibilità: quanto mi costerebbe cambiare un url da /news a /press?
nei templates HTML, al posto degli url vorrei usare dei segnaposto
vorrei che gli url fossero “generati”
debug
http://traintosymfony.com53
Emanuele Gaspari
intro
Symfony2: what?
usare un framework
Symfony internals
namespaces
Request e Response
Front Controller
flusso di un'applicazione
HTTP
Routing
clean urls
Routes in Symfony
Templating
TWIG
risposta HTML
OVERVIEW
http://traintosymfony.com54
Emanuele Gaspari
# app/config/routing.yml
prodotto_show:
path: /prodotto/{codice}
defaults: { _controller: TtsDemoBundle:Prodotto:show}
# app/config/routing.yml
prodotto_show:
path: /prodotto/{codice}
defaults: { _controller: TtsDemoBundle:Prodotto:show}
in Symfony una Route è un'associazione tra
un url e un Controller, tramite il parametro path
class ProdottoController
{
public function showAction($codice) { […] }
}
class ProdottoController
{
public function showAction($codice) { […] }
}
/prodotto/EG-124
/prodotto/DF-14
/prodotto/SSX-01
/prodotto/EG-124
/prodotto/DF-14
/prodotto/SSX-01
Route
Urls Controller
Routes
http://traintosymfony.com55
Emanuele Gaspari
prodotto_show:
path: /prodotto/{codice}
defaults: { _controller: TtsDemoBundle:Prodotto:show}
Route name
path
Controller e Action (nome logico)
una Route
http://traintosymfony.com56
Emanuele Gaspari
GET /prodotto/EG-124
GET /prodotto/EG-27
GET /prodotto/EG-74
GET /prodotto/EG-124
GET /prodotto/EG-27
GET /prodotto/EG-74
alcuni esempi di Routes
GET /GET /
GET /catalogoGET /catalogo
prodotto_show:
path: /prodotto/{codice}
defaults: [...]
prodotto_show:
path: /prodotto/{codice}
defaults: [...]
catalogo_index:
path: /catalogo
defaults: [...]
catalogo_index:
path: /catalogo
defaults: [...]
homepage:
path: /
defaults: [...]
homepage:
path: /
defaults: [...]
url e path
http://traintosymfony.com57
Emanuele Gaspari
intro
Symfony2: what?
usare un framework
Symfony internals
namespaces
Request e Response
Front Controller
flusso di un'applicazione
HTTP
Routing
clean urls
Routes in Symfony
Templating
TWIG
risposta HTML
OVERVIEW
http://traintosymfony.com58
Emanuele Gaspari
TWIG
Symfony usa TWIG come linguaggio e motore di templating per
generare contenuto HTML
TWIG permette di scrivere templates concisi e leggibili, sia da
sviluppatori che da web designers
offre anche funzionalità avanzate utilizzabili in modo semplice
The Twig logo is © 2010-2012 Sensio Labs
http://traintosymfony.com59
Emanuele Gaspari
esempio
<ul>
{% for item in menu_links %}
<li>
<a href="{{ item.href }}">
{{ item.label }}
</a>
</li>
{% endfor %}
</ul>
<ul>
{% for item in menu_links %}
<li>
<a href="{{ item.href }}">
{{ item.label }}
</a>
</li>
{% endfor %}
</ul>
uno dei punti di forza di TWIG è la leggibilità
http://traintosymfony.com60
Emanuele Gaspari
intro
Symfony2: what?
usare un framework
Symfony internals
namespaces
Request e Response
Front Controller
flusso di un'applicazione
HTTP
Routing
clean urls
Routes in Symfony
Templating
TWIG
risposta HTML
OVERVIEW
http://traintosymfony.com61
Emanuele Gaspari
risposta HTML
nella terza fase del flusso request/response l'azione produce una risposta
http://traintosymfony.com62
Emanuele Gaspari
risposta HTML
●
gestito la richiesta che arriva all'applicazione
●
analizzato i parametri di ingresso (GET, POST, SESSION, etc..)
●
utilizzato le risorse necessarie
●
eseguito delle operazioni
●
preparato i dati per la risposta
dopo che l'azione ha:
...il passaggio successivo è preparare il contenuto HTML per il client
http://traintosymfony.com63
Emanuele Gaspari
template twig
viene convertito (quasi sempre) in HTML per produrre il body
della risposta da restituire al client
●
l'azione “sceglie” un template
●
si passano (opzionalmente) delle variabili al template
●
TWIG effettua il parsing, generando HTML
●
la risposta viene inviata al client
in Symfony un template è semplicemente un file di testo
contenente tag HTML e blocchi di sintassi TWIG
TRAIN
TO SYMFONY
Verona, 13•14 Aprile 2013
the frameworkshop
http://traintosymfony.com
@TrainToSymfony
Media partner:©Copyright Emanuele Gaspari Castelletti

Weitere ähnliche Inhalte

Ähnlich wie Symfony (1/3) | Train to Symfony

GAE python GDG Milano L04
GAE python GDG Milano L04GAE python GDG Milano L04
GAE python GDG Milano L04Paolo Dadda
 
PASW4Joomla! Il nuovo modello di sito
PASW4Joomla! Il nuovo modello di sitoPASW4Joomla! Il nuovo modello di sito
PASW4Joomla! Il nuovo modello di sitoAntonio Todaro
 
Google Chrome Extensions & Plugin vs Firefox
Google Chrome Extensions & Plugin vs FirefoxGoogle Chrome Extensions & Plugin vs Firefox
Google Chrome Extensions & Plugin vs FirefoxWikiCorsoWeb
 
Programmazione Funzionale per tutti
Programmazione Funzionale per tuttiProgrammazione Funzionale per tutti
Programmazione Funzionale per tuttiSalvatore Sorrentino
 
Italy vmug 2019 PowerCLI pret-a-porter
Italy vmug 2019 PowerCLI pret-a-porterItaly vmug 2019 PowerCLI pret-a-porter
Italy vmug 2019 PowerCLI pret-a-porterMarco Scandaletti
 
Un Cms Per La Scuola Joomlafap
Un Cms Per La Scuola JoomlafapUn Cms Per La Scuola Joomlafap
Un Cms Per La Scuola JoomlafapLavia Di Sabatino
 
Un Cms Per La Scuola Joomlafap
Un Cms Per La Scuola JoomlafapUn Cms Per La Scuola Joomlafap
Un Cms Per La Scuola JoomlafapLavia Di Sabatino
 
TYPO3 sfida il mondo Enterprise
TYPO3 sfida il mondo EnterpriseTYPO3 sfida il mondo Enterprise
TYPO3 sfida il mondo EnterpriseMauro Lorenzutti
 
Meego Italian Day 2011 - Francesco Baldassarri (1)
Meego Italian Day 2011 - Francesco Baldassarri (1)Meego Italian Day 2011 - Francesco Baldassarri (1)
Meego Italian Day 2011 - Francesco Baldassarri (1)Francesco Baldassarri
 
Tanti "piccoli rilasci" con Symfony2
Tanti "piccoli rilasci" con Symfony2Tanti "piccoli rilasci" con Symfony2
Tanti "piccoli rilasci" con Symfony2Fabio Mora
 
Maven: Convention over Configuration
Maven: Convention over ConfigurationMaven: Convention over Configuration
Maven: Convention over Configurationvschiavoni
 
Cosino Enigma: the encrypted GNU/LINUX system has come true!
Cosino Enigma: the encrypted GNU/LINUX system has come true!Cosino Enigma: the encrypted GNU/LINUX system has come true!
Cosino Enigma: the encrypted GNU/LINUX system has come true!festival ICT 2016
 
Connector Algebra Build on top of Apache Camel - EIP
Connector Algebra Build on top of Apache Camel - EIPConnector Algebra Build on top of Apache Camel - EIP
Connector Algebra Build on top of Apache Camel - EIPGiacomo Lamonaco
 

Ähnlich wie Symfony (1/3) | Train to Symfony (20)

GAE python GDG Milano L04
GAE python GDG Milano L04GAE python GDG Milano L04
GAE python GDG Milano L04
 
unreal IRCd 3281
unreal IRCd 3281unreal IRCd 3281
unreal IRCd 3281
 
PASW4 Joomla!
PASW4 Joomla!PASW4 Joomla!
PASW4 Joomla!
 
PASW4Joomla! Il nuovo modello di sito
PASW4Joomla! Il nuovo modello di sitoPASW4Joomla! Il nuovo modello di sito
PASW4Joomla! Il nuovo modello di sito
 
Grasso Frameworks Ajax
Grasso Frameworks AjaxGrasso Frameworks Ajax
Grasso Frameworks Ajax
 
Google Chrome Extensions & Plugin vs Firefox
Google Chrome Extensions & Plugin vs FirefoxGoogle Chrome Extensions & Plugin vs Firefox
Google Chrome Extensions & Plugin vs Firefox
 
Google chrome
Google chromeGoogle chrome
Google chrome
 
Programmazione Funzionale per tutti
Programmazione Funzionale per tuttiProgrammazione Funzionale per tutti
Programmazione Funzionale per tutti
 
Italy vmug 2019 PowerCLI pret-a-porter
Italy vmug 2019 PowerCLI pret-a-porterItaly vmug 2019 PowerCLI pret-a-porter
Italy vmug 2019 PowerCLI pret-a-porter
 
Sviluppare moduli per il client web
Sviluppare moduli per il client webSviluppare moduli per il client web
Sviluppare moduli per il client web
 
Un Cms Per La Scuola Joomlafap
Un Cms Per La Scuola JoomlafapUn Cms Per La Scuola Joomlafap
Un Cms Per La Scuola Joomlafap
 
Un Cms Per La Scuola Joomlafap
Un Cms Per La Scuola JoomlafapUn Cms Per La Scuola Joomlafap
Un Cms Per La Scuola Joomlafap
 
TYPO3 sfida il mondo Enterprise
TYPO3 sfida il mondo EnterpriseTYPO3 sfida il mondo Enterprise
TYPO3 sfida il mondo Enterprise
 
The road to php7
The road to php7The road to php7
The road to php7
 
Meego Italian Day 2011 - Francesco Baldassarri (1)
Meego Italian Day 2011 - Francesco Baldassarri (1)Meego Italian Day 2011 - Francesco Baldassarri (1)
Meego Italian Day 2011 - Francesco Baldassarri (1)
 
Tanti "piccoli rilasci" con Symfony2
Tanti "piccoli rilasci" con Symfony2Tanti "piccoli rilasci" con Symfony2
Tanti "piccoli rilasci" con Symfony2
 
Smart api
Smart apiSmart api
Smart api
 
Maven: Convention over Configuration
Maven: Convention over ConfigurationMaven: Convention over Configuration
Maven: Convention over Configuration
 
Cosino Enigma: the encrypted GNU/LINUX system has come true!
Cosino Enigma: the encrypted GNU/LINUX system has come true!Cosino Enigma: the encrypted GNU/LINUX system has come true!
Cosino Enigma: the encrypted GNU/LINUX system has come true!
 
Connector Algebra Build on top of Apache Camel - EIP
Connector Algebra Build on top of Apache Camel - EIPConnector Algebra Build on top of Apache Camel - EIP
Connector Algebra Build on top of Apache Camel - EIP
 

Symfony (1/3) | Train to Symfony