SlideShare a Scribd company logo
Sviluppo Web
con Yii 1.1
Overview
● Introduzione al framework
● Active Record
● Model View Controller
● Routing
● Autenticazione
● Automatic Code Generation
● Migrazioni
● I18N & L10N
● Aspetti negativi
● Argomenti da trattare in futuro
Cos'è?
Yii è un framework PHP ad alte prestazioni
adatto per lo sviluppo di applicazioni Web 2.0
Storia
● Ideato da Qiang Xue
● Influenzato da
○ Prado framework
■ Per il quale Xue ha sviluppato per molti anni
■ E' stata la maggiore sorgente di idee
○ Ruby on Rails
■ Per la filosofia e alcuni pattern
○ jQuery
■ Perfettamente integrato in Yii
○ Symfony
■ Per il sistema di estensione
○ Joomla
■ Per la modularità
A chi è rivolto?
● Sviluppatori per il Web
○ con qualsiasi livello di esperienza
○ con conoscenze di base su
■ PHP
■ Object Oriented
■ MVC
■ HTML
Cosa si può sviluppare?
● Portali
● Forums
● Content management systems (CMS)
● E-commerce
● Social network
● Web Service (Soap o RESTful)
● ...
Framework "Concorrenti"
● Ruby
○ Ruby on Rails
○ Sinatra
● Java
○ Play!
○ Apache Wicket
○ Apache Tapestry
○ Apache Struts
○ ZK
○ OpenXava
○ Spring
○ Google Web Toolkit
○ ...
Framework "Concorrenti"
● Perl
○ Catalyst
○ Mojolicious
○ Dancer
○ Mason
● Pyton
○ Django
○ Zope 2
○ web2py
○ Pyramid
○ TurboGears
○ Pylons
○ ...
Framework "Concorrenti"
● Php
○ Symfony
○ Framewire
○ Laravel
○ CodeIgniter
○ CakePHP
○ Zend Framework
○ Kajona
○ FuelPHP
○ Horde
○ Flow3
○ Joomla! Platform
○ ...
Framework "Concorrenti"
● ASP.NET
○ ...
● C++
○ ...
● ColdFusion Markup Language (CFML)
○ ...
● ECMAScript
○ ...
● JavaScript
○ ...
Perchè usarlo?
● Basso costo di apprendimento
● Largo uso di buone pratiche
○ Don't Repeat Yourself
○ Convention Over Configuration
● Comuntà molto attiva
● Documentazione esaustiva
● Crescente numero di estensioni
● Coesiste bene con altri framework
● Performance...
Perchè usarlo?
RPS = Request Per Second
Licenza BSD
● Permette di
○ usare
○ modificare
○ redistribuire
● A patto di
○ conservare la dicitura
■ Copyright © 2008-2012 by Yii Software LLC
■ All rights reserved.
○ non pubblicizzarsi tramite il marchio
■ Yii Software LLC
Active Record
● Pattern architetturale
per l'accesso al DB
● Inventato da
● Proposto nel libro
○ Patterns of Enterprise
Application Architecture (2002)
● Utilizzato in tutti i framework
di ultima generazione
Martin Fowler
Autore e speaker
internazionale sullo
sviluppo di software
E' noto come l'uomo
chiave nella creazione
delle metodologie agili
Capo della ThoughtWorks
Active Record
● Supponiamo di avere la seguente tabella:
CREATE TABLE tbl_post (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
title VARCHAR(128) NOT NULL,
content TEXT NOT NULL,
update TIMESTAMP NOT NULL,
author VARCHAR(64) NOT NULL
);
Active Record
● Senza il pattern
○ aggiungere un nuovo post
■ $sql = "INSERT INTO tbl_post (title,
content, update, author) VALUES
($title,$content,".now().",$author);";
■ $db->execute($sql);
○ modificare un post esistente
■ $sql = "UPDATE SET title=$title,
content=$content, update=".now().",
author=$author WHERE id=$id;";
■ $db->execute($sql);
○ risulta
■ scomodo da scrivere e manutenere
■ soggetto a SQL Injection
Active Record
● Con il pattern
○ aggiungere un nuovo post
■ $post = new Post();
■ $post->title = $title;
■ $post->content = $content;
■ $post->update = now();
■ $post->author = $author;
■ $post->save()
○ modificare un post esistente
■ come sopra
○ risulta
■ semplice da scrivere e manutenere
■ non soggetto a SQL Injection
Active Record
● Definizione della classe Post
class Post extends CActiveRecord
{
public function tableName()
{
return 'tbl_post';
}
}
Active Record
● metodi proposti da Yii
○ attributeNames()
○ find($condition,$params)
○ findAll($condition,$params)
○ count($condition,$params)
○ exists()
○ save()
○ update()
○ delete()
○ ...
Model View Controller
● Pattern architteturale
● Favorisce
○ separazione degli interessi
○ manutenzione
● Largamente utilizzato nel web
● Pattern alternativi sono
○ Model View Presenter (MVP)
○ Model View ViewModel (MVVM)
○ Model View Adapter (MVA)
Model View Controller
Model View Controller in Yii
Tipico
Workflow
in Yii
www.miosito.it/index.php?r=site/contact
class SiteController extends CController
{
public function actionContact()
{
// renderizzazione della
// pagina dei contatti
$this->render('contact');
}
}
Controller & Routing
www.miosito.it/site/contact
class SiteController extends CController
{
public function actionContact()
{
// renderizzazione della
// pagina dei contatti
$this->render('contact');
}
}
Controller & Routing
class SiteController extends CController
{
public function accessRules()
{
return array(
array(
$permission, /**'allows' o 'deny'**/,
'actions'=>array(/**lista di actions**/),
'users'=>array(/**tipi di utente**/),
),
);
}
}
Tipi di utente: username, * (tutti), @ (loggati), ? (non loggati)
Autenticazione
Migrazioni
● Nascono con Ruby On Rails
● Permettono il versionamento del DataBase
● Facilitano l'evoluzione del DataBase
● Migliorano la suddivisione del lavoro in un
team
class m121031_094248_create_user extends CDbMigration
{
public function up()
{
$this->createTable('user', array(
'id' => 'int UNSIGNED PRIMARY KEY',
'username' => 'string NOT NULL',
'password' => 'string NOT NULL',
'email' => 'string UNIQUE NOT NULL',
'role' => 'int UNSIGNED NOT NULL'
)
);
public function down()
{
$this->dropTable('user');
return true;
}
Migrazioni
Tizio Caio
Migrazione1 Migrazione2
Tizio Local
DataBase
Caio Local
DataBase
Sempronio
Merge
Migrazioni
Sempronio
Local
DataBase
Source Code Management (git, svn, cvs, ecc.)
deploy &
esecuzione
migrazioni
check-out check-in
& merge
DataBase
Remoto
SERVER
check-out
Merge
Migrazioni
I18N & L10N
● Core completamente localizzato
● Localizzatore per le date
● Localizzatore per i numeri
● Localizzatore per le valute
● Meccanismi di localizzazione di view
○ Messaggi
○ Sovrascrittura delle view
Messaggi
return array(
'Hello World' => 'Ciao Mondo'
);
● Definizione
File: ../../messages/it_IT/site.php
● Uso nella view
<h1>
<?php echo Yii::t('site','Hello World') ?>
</h1>
File: ../../view/site/index.php
Sovrascrittura delle view
<h1>
Hello World
</h1>
● View in Inglese
File: ../../view/site/index.php
● View in Italiano
<h1>
Ciao Mondo
</h1>
File: ../../view/site/it_IT/index.php
Automatic Code Generation
● Utilizza tecniche di scaffolding
● Produce strutture per
○ Creare
○ Leggere
○ Aggiornare
○ Eliminare
● Prevede aggiustamenti post-generazione
○ In contrapposizione ai sistemi basati sulle
parametrizzazioni
● Utile anche per generare prototipi
● In Yii si chiama Gii
Sviluppo web con Yii
Sviluppo web con Yii
Aspetti negativi
● Fusione tra Model e ActiveRecord
● Roadmap priva di date di rilascio
● Progetto abbastanza nuovo (Dic 2008)
● Meno opportunità di lavoro rispetto ad altri
framework
○ Che però sono in crescita
○ http://www.yiiframework.com/forum/index.php/forum/15-job-opportunities/
Argomenti da trattare in futuro
● Estendibilità
● Test driven development
● Meccanismi di Caching
● Meccanismi di accesso diretto al database
● Produzione automatica di HTML & temi
● Regole di accesso avanzate
● URL rewriting
Grazie per l'attenzione...
Domande??

More Related Content

PPTX
Connector Algebra Build on top of Apache Camel - EIP
PPT
Wpo extended
PPT
Adempiere Presentazione
PDF
Presentazione Testing automatizzato
ODP
Apache Syncope: an Apache Camel Integration Proposal
PDF
Codemotion fuse presentation
ODP
ODP
Working between the clouds (versione completa)
Connector Algebra Build on top of Apache Camel - EIP
Wpo extended
Adempiere Presentazione
Presentazione Testing automatizzato
Apache Syncope: an Apache Camel Integration Proposal
Codemotion fuse presentation
Working between the clouds (versione completa)

Similar to Sviluppo web con Yii (20)

ODP
Yii Framework - yes it is rapid web application development (Parte 1)
PDF
Sviluppo web con Ruby on Rails
PDF
Hands on MVC - Mastering the Web
PDF
Tecnologie emergenti per lo sviluppo di web applications: il caso di Ruby on ...
PDF
Spaghetti code refactoring
PPT
Web & Library 2
ODP
Infrastrutture web e Ruby on Rails
ZIP
Introduzione a Ruby On Rails
PDF
Sviluppo web dall'antichità all'avanguardia e ritorno
PDF
Smau milano 2012 massimiliano del cero
PPTX
Dal requisito all'implementazione @ CD2010
PDF
Zend Framework Workshop Parte1
PDF
Programmazione web libera dai framework
DOCX
Tesi Giuseppe Chechile
PDF
PDF
Presentazione framework Symfony
PPT
I cataloghi delle biblioteche e il nuovo Web (1)
PDF
Progettazione e realizzazione di siti web, a.a. 2013-2014
PDF
Case study: un approccio modulare in un progetto legacy
Yii Framework - yes it is rapid web application development (Parte 1)
Sviluppo web con Ruby on Rails
Hands on MVC - Mastering the Web
Tecnologie emergenti per lo sviluppo di web applications: il caso di Ruby on ...
Spaghetti code refactoring
Web & Library 2
Infrastrutture web e Ruby on Rails
Introduzione a Ruby On Rails
Sviluppo web dall'antichità all'avanguardia e ritorno
Smau milano 2012 massimiliano del cero
Dal requisito all'implementazione @ CD2010
Zend Framework Workshop Parte1
Programmazione web libera dai framework
Tesi Giuseppe Chechile
Presentazione framework Symfony
I cataloghi delle biblioteche e il nuovo Web (1)
Progettazione e realizzazione di siti web, a.a. 2013-2014
Case study: un approccio modulare in un progetto legacy
Ad

Sviluppo web con Yii

  • 2. Overview ● Introduzione al framework ● Active Record ● Model View Controller ● Routing ● Autenticazione ● Automatic Code Generation ● Migrazioni ● I18N & L10N ● Aspetti negativi ● Argomenti da trattare in futuro
  • 3. Cos'è? Yii è un framework PHP ad alte prestazioni adatto per lo sviluppo di applicazioni Web 2.0
  • 4. Storia ● Ideato da Qiang Xue ● Influenzato da ○ Prado framework ■ Per il quale Xue ha sviluppato per molti anni ■ E' stata la maggiore sorgente di idee ○ Ruby on Rails ■ Per la filosofia e alcuni pattern ○ jQuery ■ Perfettamente integrato in Yii ○ Symfony ■ Per il sistema di estensione ○ Joomla ■ Per la modularità
  • 5. A chi è rivolto? ● Sviluppatori per il Web ○ con qualsiasi livello di esperienza ○ con conoscenze di base su ■ PHP ■ Object Oriented ■ MVC ■ HTML
  • 6. Cosa si può sviluppare? ● Portali ● Forums ● Content management systems (CMS) ● E-commerce ● Social network ● Web Service (Soap o RESTful) ● ...
  • 7. Framework "Concorrenti" ● Ruby ○ Ruby on Rails ○ Sinatra ● Java ○ Play! ○ Apache Wicket ○ Apache Tapestry ○ Apache Struts ○ ZK ○ OpenXava ○ Spring ○ Google Web Toolkit ○ ...
  • 8. Framework "Concorrenti" ● Perl ○ Catalyst ○ Mojolicious ○ Dancer ○ Mason ● Pyton ○ Django ○ Zope 2 ○ web2py ○ Pyramid ○ TurboGears ○ Pylons ○ ...
  • 9. Framework "Concorrenti" ● Php ○ Symfony ○ Framewire ○ Laravel ○ CodeIgniter ○ CakePHP ○ Zend Framework ○ Kajona ○ FuelPHP ○ Horde ○ Flow3 ○ Joomla! Platform ○ ...
  • 10. Framework "Concorrenti" ● ASP.NET ○ ... ● C++ ○ ... ● ColdFusion Markup Language (CFML) ○ ... ● ECMAScript ○ ... ● JavaScript ○ ...
  • 11. Perchè usarlo? ● Basso costo di apprendimento ● Largo uso di buone pratiche ○ Don't Repeat Yourself ○ Convention Over Configuration ● Comuntà molto attiva ● Documentazione esaustiva ● Crescente numero di estensioni ● Coesiste bene con altri framework ● Performance...
  • 12. Perchè usarlo? RPS = Request Per Second
  • 13. Licenza BSD ● Permette di ○ usare ○ modificare ○ redistribuire ● A patto di ○ conservare la dicitura ■ Copyright © 2008-2012 by Yii Software LLC ■ All rights reserved. ○ non pubblicizzarsi tramite il marchio ■ Yii Software LLC
  • 14. Active Record ● Pattern architetturale per l'accesso al DB ● Inventato da ● Proposto nel libro ○ Patterns of Enterprise Application Architecture (2002) ● Utilizzato in tutti i framework di ultima generazione Martin Fowler Autore e speaker internazionale sullo sviluppo di software E' noto come l'uomo chiave nella creazione delle metodologie agili Capo della ThoughtWorks
  • 15. Active Record ● Supponiamo di avere la seguente tabella: CREATE TABLE tbl_post ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, title VARCHAR(128) NOT NULL, content TEXT NOT NULL, update TIMESTAMP NOT NULL, author VARCHAR(64) NOT NULL );
  • 16. Active Record ● Senza il pattern ○ aggiungere un nuovo post ■ $sql = "INSERT INTO tbl_post (title, content, update, author) VALUES ($title,$content,".now().",$author);"; ■ $db->execute($sql); ○ modificare un post esistente ■ $sql = "UPDATE SET title=$title, content=$content, update=".now().", author=$author WHERE id=$id;"; ■ $db->execute($sql); ○ risulta ■ scomodo da scrivere e manutenere ■ soggetto a SQL Injection
  • 17. Active Record ● Con il pattern ○ aggiungere un nuovo post ■ $post = new Post(); ■ $post->title = $title; ■ $post->content = $content; ■ $post->update = now(); ■ $post->author = $author; ■ $post->save() ○ modificare un post esistente ■ come sopra ○ risulta ■ semplice da scrivere e manutenere ■ non soggetto a SQL Injection
  • 18. Active Record ● Definizione della classe Post class Post extends CActiveRecord { public function tableName() { return 'tbl_post'; } }
  • 19. Active Record ● metodi proposti da Yii ○ attributeNames() ○ find($condition,$params) ○ findAll($condition,$params) ○ count($condition,$params) ○ exists() ○ save() ○ update() ○ delete() ○ ...
  • 20. Model View Controller ● Pattern architteturale ● Favorisce ○ separazione degli interessi ○ manutenzione ● Largamente utilizzato nel web ● Pattern alternativi sono ○ Model View Presenter (MVP) ○ Model View ViewModel (MVVM) ○ Model View Adapter (MVA)
  • 24. www.miosito.it/index.php?r=site/contact class SiteController extends CController { public function actionContact() { // renderizzazione della // pagina dei contatti $this->render('contact'); } } Controller & Routing
  • 25. www.miosito.it/site/contact class SiteController extends CController { public function actionContact() { // renderizzazione della // pagina dei contatti $this->render('contact'); } } Controller & Routing
  • 26. class SiteController extends CController { public function accessRules() { return array( array( $permission, /**'allows' o 'deny'**/, 'actions'=>array(/**lista di actions**/), 'users'=>array(/**tipi di utente**/), ), ); } } Tipi di utente: username, * (tutti), @ (loggati), ? (non loggati) Autenticazione
  • 27. Migrazioni ● Nascono con Ruby On Rails ● Permettono il versionamento del DataBase ● Facilitano l'evoluzione del DataBase ● Migliorano la suddivisione del lavoro in un team
  • 28. class m121031_094248_create_user extends CDbMigration { public function up() { $this->createTable('user', array( 'id' => 'int UNSIGNED PRIMARY KEY', 'username' => 'string NOT NULL', 'password' => 'string NOT NULL', 'email' => 'string UNIQUE NOT NULL', 'role' => 'int UNSIGNED NOT NULL' ) ); public function down() { $this->dropTable('user'); return true; }
  • 29. Migrazioni Tizio Caio Migrazione1 Migrazione2 Tizio Local DataBase Caio Local DataBase Sempronio Merge Migrazioni Sempronio Local DataBase Source Code Management (git, svn, cvs, ecc.) deploy & esecuzione migrazioni check-out check-in & merge DataBase Remoto SERVER check-out Merge Migrazioni
  • 30. I18N & L10N ● Core completamente localizzato ● Localizzatore per le date ● Localizzatore per i numeri ● Localizzatore per le valute ● Meccanismi di localizzazione di view ○ Messaggi ○ Sovrascrittura delle view
  • 31. Messaggi return array( 'Hello World' => 'Ciao Mondo' ); ● Definizione File: ../../messages/it_IT/site.php ● Uso nella view <h1> <?php echo Yii::t('site','Hello World') ?> </h1> File: ../../view/site/index.php
  • 32. Sovrascrittura delle view <h1> Hello World </h1> ● View in Inglese File: ../../view/site/index.php ● View in Italiano <h1> Ciao Mondo </h1> File: ../../view/site/it_IT/index.php
  • 33. Automatic Code Generation ● Utilizza tecniche di scaffolding ● Produce strutture per ○ Creare ○ Leggere ○ Aggiornare ○ Eliminare ● Prevede aggiustamenti post-generazione ○ In contrapposizione ai sistemi basati sulle parametrizzazioni ● Utile anche per generare prototipi ● In Yii si chiama Gii
  • 36. Aspetti negativi ● Fusione tra Model e ActiveRecord ● Roadmap priva di date di rilascio ● Progetto abbastanza nuovo (Dic 2008) ● Meno opportunità di lavoro rispetto ad altri framework ○ Che però sono in crescita ○ http://www.yiiframework.com/forum/index.php/forum/15-job-opportunities/
  • 37. Argomenti da trattare in futuro ● Estendibilità ● Test driven development ● Meccanismi di Caching ● Meccanismi di accesso diretto al database ● Produzione automatica di HTML & temi ● Regole di accesso avanzate ● URL rewriting