SlideShare une entreprise Scribd logo
1  sur  35
Laravel: Yet another Framework
@lahaxe_arnaud 1
Présentation (1/3)
- Créé par Taylor Otwell
- En 2011
- Inspiré de Django, Ruby on rails, python, Symfony 2…
2
@taylorotwell
Trust me I'm an
engineer
Présentation (2/3)
- Composant Symfony 2 (13/28)
BrowserKit, Console, CssSelector, Debug, DomCrawler, EventDispatcher, Filesystem,
Finder,
HttpFoundation, HttpKernel, Process, PropertyAccess, Routing, Translation
- Les composants sont wrappés pour fournir une API simple et intuitive
3
Présentation (2/3)
- Le meilleur de PHP:
- Namespace
- Closure
- Méthodes magiques
- Interface
- Trait
- Respect des standards de la FIG
https://github.com/php-fig/fig-standards
4
Popularité
5V4V3 V5
Framework - IoC (1/4)
Inversion Of Control container
Le principe est de découpler les liens de dépendances entre objets. Ainsi les dépendances entre
composants logiciels ne sont plus exprimées dans le code de manière statique mais déterminées
dynamiquement à l'exécution.
Wikipedia
6
Framework - IoC (2/4)
7
class Car
{
public function start()
{
$engine = new Engine();
$engine->vroom();
}
}
$car = new Car();
$car->start();
Framework - IoC (3/4)
8
class Car
{
protected $engine;
public function __construct(Engine $engine)
{
$this->engine = $engine;
}
public function start()
{
$this->engine->vroom();
}
}
$car = App::make('Car');
$car->start();
Le container va par défaut lui-même créer et
injecter l’instance de Engine
Framework - IoC (4/4)
Ok et alors ?
9
App::bind('Engine', function () {
return new MockEngine();
});
Framework - Facade
10
Design Pattern Facade:
- Config
- Request
- Response
- Queue
- Cache
- ...
Basé sur l’IoC
Abstraction / l’implémentation
Migration (1/2)
class CreateUserTable extends Migration
{
public function up() {
Schema::create('users', function ($table) {
$table->increments('id');
$table->string('username');
$table->string('email')->unique();
$table->string('password');
$table->string('remember_token')
->nullable()->default(null);
$table->timestamps();
});
}
public function down() {
Schema::drop('users');
}
} 11
● Table schema versioning
● Migration rollback
● Compatible Mysql/Sqlite/PgSQL…
● Gestion des index, foreign key, cascade,
default…
Migration (2/2)
12
Eloquent
13
ORM
- Active record
- Gestion des relations hasMany, belongTo…
- Pagination
- Chunk
- Gestion lazy and eager loading
- Soft delete
- ...
class Beer extends Eloquent {
public function brand()
{
return $this->belongsTo('Brand');
}
}
$collection = Beer::where('alcohol', '>', 5)->take(10)->get();
$paginator = Beer::where('alcohol', '<', 10)->paginate();
$beer = Beer::with('brand')->find(1); // eager
$brand = Beer::find(1)->brand; // brand() return
Collection
$beer->name = "Unicorn";
$beer->save();
$beer->delete();
Cache
14
Les classiques get, put, flush…
Mais aussi des fonctionnalités plus
avancées:
- remember
- forever
- tags
- increment / decrement
Support natif de redis, memcached, apc,
fichiers et base de données
$value = Cache::remember('posts', $minutes, function()
{
return Post::all();
});
Cache::tags('people', 'authors')->put('John', $john, $minutes);
Cache::tags('authors')->flush();
Post::cacheTags('post')->remember(5)->where(['author_id' => 2]);
Queues
15
Diminution du temps de réponse
Api simple et unique
Plusieurs services en build-in:
- Beanstalkd
- Iron.ion
- Simple Amazon Queue
- Redis
Queue::push('SendEmail', array('message' => $message));
Queue::bulk(array('SendEmail', 'NotifyUser'), $payload);
Queue::later($date, 'SendEmail@send', array('message' => $message));
class SendEmail {
public function fire($job, $data)
{ /* … */ }
}
php artisan queue:work
php artisan queue:listen /* Works with supervisor */
Autres Goodies
16
Routeur RestFull et ressource
Events
Mails
Authentification
Configuration / environnement
Moteur de template (Blade)
Database migration
Facturation / paiement …
…
Whoops
17
filp/whoops
Supprimé dans Laravel 5
Laravel 5
18
● PSR 4
● Ajout des “Contacts”
● Middelware
● Amélioration de “l’injecteur” de dépendances
● Laravel Socialize
● Form Request
Laravel 5
19
● Annotations pour routage / middleware
○ désactivé par défaut
● Cache des routes
/**
* @Get("/")
*/
/**
* @Middleware("guest", except={"logout"})
*/
Laravel 5
20
● Suppression de certains composants purement web
● OAuth
● Less
Laravel 4 vs Laravel 5
21
● Contrôle simplifié des accès
● global.php moins fourre tout
● Formalisation de la validation des forms
● Handlers pour éviter la duplication de code
○ Bus
● Générateurs
Capitaliser le code
22
● Développement modulaire
● OpenSource ou non
● Installable via composer
"require": {
"lahaxearnaud/laravel-token": "~0.5",
...
},
Capitaliser le code
23
Un workbench peux contenir:
- des migrations
- des modèles
- des contrôleurs
- …
Mais surtout des tests
;(
Ressources utiles
24
● Ubuntu 14.04
● PHP 5.6
● HHVM
● Nginx
● MySQL
● Postgres
● Node (With Bower, Grunt, and Gulp)
● Redis
● Memcached
● Beanstalkd
● …
laravel/homestead
Ressources utiles
25
barryvdh/laravel-debugbar
Ressources utiles
26
laravelbook/ardent
class User extends LaravelBookArdentArdent {
public static $rules = array(
'name' => 'required|between:4,16',
'email' => 'required|email',
'password' =>
'required|alpha_num|between:4,8|confirmed',
'password_confirmation' => 'required|alpha_num|between:4,8',
);
}
Ressources utiles
27
Former::horizontal_open()
->id('MyForm')
->secure() // token CSRF
->populate($user)
->rules(User::$rules) // ardent rules
->method('POST');
Former::xlarge_text('name')
->class('myclass')
->value('Joseph');
Former::textarea('bio')
->rows(10)->columns(20)
->autofocus();
Former::actions()
->large_primary_submit('Submit')
->large_inverse_reset('Reset');
Former::close();
Anahkiasen/former
Ressources utiles
28
JeffreyWay/Laravel-4-Generators
Intégré dans Laravel 5
Ressources utiles
29
barryvdh/laravel-ide-helper
/**
* User
*
* @property integer $id
* @property string $username
* @property string $email
* @property string $password
* ...
* @property CarbonCarbon $updated_at
* @method static IlluminateDatabaseQueryBuilder|User whereId($value)
* ...
*/
Laravel Vs Symfony
30
http://systemsarchitect.net/
ab -c 20 -n 50 http://site.dev
Laravel 135.9 req/s
Symfony2 39.22 req/s
Laravel Vs Symfony
31
Laravel Vs Symfony
32
Symfony 2 Laravel 4
Phpmetrics
Laravel Vs Symfony
33
Laravel Symfony
Forge eZ Publish
Snappy Composer
October CMS Magento
Invoice Ninja Drupal
Conclusion
34
- Bâti sur de bonnes bases
- Bonne communauté
- Construit pour être testable
- Popularité grandissante
- Plus mature dans sa version 5
35
Questions
?>

Contenu connexe

Tendances

Bonnes pratiques de developpement en PHP
Bonnes pratiques de developpement en PHPBonnes pratiques de developpement en PHP
Bonnes pratiques de developpement en PHPPascal MARTIN
 
當六脈神劍遇上 PhpStorm
當六脈神劍遇上 PhpStorm當六脈神劍遇上 PhpStorm
當六脈神劍遇上 PhpStormOomusou Xiao
 
NodeJS for Mobile App
NodeJS for Mobile AppNodeJS for Mobile App
NodeJS for Mobile AppHabib MAALEM
 
Intégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsIntégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsHugo Hamon
 
Déploiement PHP : de l'âge de pierre à nos jours.
Déploiement PHP : de l'âge de pierre à nos jours.Déploiement PHP : de l'âge de pierre à nos jours.
Déploiement PHP : de l'âge de pierre à nos jours.Amélie DUVERNET
 
Jenkins - Les jeudis de la découverte
Jenkins - Les jeudis de la découverteJenkins - Les jeudis de la découverte
Jenkins - Les jeudis de la découverteStephane Couzinier
 
Hermes, génération et déploiement d'ipa by Peter Meuel
Hermes, génération et déploiement d'ipa by Peter MeuelHermes, génération et déploiement d'ipa by Peter Meuel
Hermes, génération et déploiement d'ipa by Peter MeuelCocoaHeads France
 
Introduction à Symfony2
Introduction à Symfony2Introduction à Symfony2
Introduction à Symfony2Hugo Hamon
 
SonarQube Manuel Automatisation d'analyse ANT JENKINS/Hudson
SonarQube Manuel Automatisation d'analyse ANT JENKINS/HudsonSonarQube Manuel Automatisation d'analyse ANT JENKINS/Hudson
SonarQube Manuel Automatisation d'analyse ANT JENKINS/Hudsonxmacina
 
JENKINS_OWF11_OSDC_PARIS20110924
JENKINS_OWF11_OSDC_PARIS20110924JENKINS_OWF11_OSDC_PARIS20110924
JENKINS_OWF11_OSDC_PARIS20110924Gregory Boissinot
 
Intégration continue & Qualité logicielle
Intégration continue & Qualité logicielleIntégration continue & Qualité logicielle
Intégration continue & Qualité logicielleDavid Buros
 
Utiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec SymfonyUtiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec SymfonyXavier Gorse
 
ASP.NET MVC 6
ASP.NET MVC 6ASP.NET MVC 6
ASP.NET MVC 6Microsoft
 
Introduction à CakePHP
Introduction à CakePHPIntroduction à CakePHP
Introduction à CakePHPPierre MARTIN
 
Initiation à Express js
Initiation à Express jsInitiation à Express js
Initiation à Express jsAbdoulaye Dieng
 
Gatekeeper par Guillaume Faure
Gatekeeper par Guillaume FaureGatekeeper par Guillaume Faure
Gatekeeper par Guillaume FaureCocoaHeads France
 
What's Next Replay - IC / Jenkins
What's Next Replay - IC / JenkinsWhat's Next Replay - IC / Jenkins
What's Next Replay - IC / JenkinsZenikaOuest
 

Tendances (20)

Bonnes pratiques de developpement en PHP
Bonnes pratiques de developpement en PHPBonnes pratiques de developpement en PHP
Bonnes pratiques de developpement en PHP
 
當六脈神劍遇上 PhpStorm
當六脈神劍遇上 PhpStorm當六脈神劍遇上 PhpStorm
當六脈神劍遇上 PhpStorm
 
NodeJS for Mobile App
NodeJS for Mobile AppNodeJS for Mobile App
NodeJS for Mobile App
 
Intégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec JenkinsIntégration continue des projets PHP avec Jenkins
Intégration continue des projets PHP avec Jenkins
 
Déploiement PHP : de l'âge de pierre à nos jours.
Déploiement PHP : de l'âge de pierre à nos jours.Déploiement PHP : de l'âge de pierre à nos jours.
Déploiement PHP : de l'âge de pierre à nos jours.
 
Jenkins - Les jeudis de la découverte
Jenkins - Les jeudis de la découverteJenkins - Les jeudis de la découverte
Jenkins - Les jeudis de la découverte
 
Hermes, génération et déploiement d'ipa by Peter Meuel
Hermes, génération et déploiement d'ipa by Peter MeuelHermes, génération et déploiement d'ipa by Peter Meuel
Hermes, génération et déploiement d'ipa by Peter Meuel
 
Introduction à Symfony2
Introduction à Symfony2Introduction à Symfony2
Introduction à Symfony2
 
SonarQube Manuel Automatisation d'analyse ANT JENKINS/Hudson
SonarQube Manuel Automatisation d'analyse ANT JENKINS/HudsonSonarQube Manuel Automatisation d'analyse ANT JENKINS/Hudson
SonarQube Manuel Automatisation d'analyse ANT JENKINS/Hudson
 
JENKINS_OWF11_OSDC_PARIS20110924
JENKINS_OWF11_OSDC_PARIS20110924JENKINS_OWF11_OSDC_PARIS20110924
JENKINS_OWF11_OSDC_PARIS20110924
 
Jenkins Workflow
Jenkins WorkflowJenkins Workflow
Jenkins Workflow
 
Nouveautés de java 8
Nouveautés de java 8Nouveautés de java 8
Nouveautés de java 8
 
Intégration continue & Qualité logicielle
Intégration continue & Qualité logicielleIntégration continue & Qualité logicielle
Intégration continue & Qualité logicielle
 
Utiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec SymfonyUtiliser le Zend Framework avec Symfony
Utiliser le Zend Framework avec Symfony
 
Python + ansible = ♥
Python + ansible = ♥Python + ansible = ♥
Python + ansible = ♥
 
ASP.NET MVC 6
ASP.NET MVC 6ASP.NET MVC 6
ASP.NET MVC 6
 
Introduction à CakePHP
Introduction à CakePHPIntroduction à CakePHP
Introduction à CakePHP
 
Initiation à Express js
Initiation à Express jsInitiation à Express js
Initiation à Express js
 
Gatekeeper par Guillaume Faure
Gatekeeper par Guillaume FaureGatekeeper par Guillaume Faure
Gatekeeper par Guillaume Faure
 
What's Next Replay - IC / Jenkins
What's Next Replay - IC / JenkinsWhat's Next Replay - IC / Jenkins
What's Next Replay - IC / Jenkins
 

En vedette

Memoire de fin d'études pour le diplome de Chef de Projet Informatique et Rés...
Memoire de fin d'études pour le diplome de Chef de Projet Informatique et Rés...Memoire de fin d'études pour le diplome de Chef de Projet Informatique et Rés...
Memoire de fin d'études pour le diplome de Chef de Projet Informatique et Rés...Arnold Stellio
 
Projet de Fin d’Études - Écoles d'ingénieur informatique - Place de marché d'...
Projet de Fin d’Études - Écoles d'ingénieur informatique - Place de marché d'...Projet de Fin d’Études - Écoles d'ingénieur informatique - Place de marché d'...
Projet de Fin d’Études - Écoles d'ingénieur informatique - Place de marché d'...Novius
 
Formacion camara-madrid-septiembre-2012
Formacion camara-madrid-septiembre-2012Formacion camara-madrid-septiembre-2012
Formacion camara-madrid-septiembre-2012Canal IP
 
El SEO y la Geolocalización
El SEO y la GeolocalizaciónEl SEO y la Geolocalización
El SEO y la GeolocalizaciónCanal IP
 
Affinity Engine - Recommandations personnalisées - Offre Affinity Items
Affinity Engine - Recommandations personnalisées - Offre Affinity ItemsAffinity Engine - Recommandations personnalisées - Offre Affinity Items
Affinity Engine - Recommandations personnalisées - Offre Affinity ItemsAffinity Engine
 
Affinity Engine - Recommandations personnalisées - Offre Affinity Items
Affinity Engine - Recommandations personnalisées - Offre Affinity ItemsAffinity Engine - Recommandations personnalisées - Offre Affinity Items
Affinity Engine - Recommandations personnalisées - Offre Affinity ItemsStéphane Roy
 
GtugDakar AppEngine, Gwt
GtugDakar AppEngine, GwtGtugDakar AppEngine, Gwt
GtugDakar AppEngine, Gwthkairi
 
Economie du développement soutenable
Economie du développement soutenableEconomie du développement soutenable
Economie du développement soutenablePierre Taillant
 
Recommandations avec Neo4j et le GraphAware Recommendation Engine
Recommandations avec Neo4j et le GraphAware Recommendation EngineRecommandations avec Neo4j et le GraphAware Recommendation Engine
Recommandations avec Neo4j et le GraphAware Recommendation EngineChristophe Willemsen
 
Smart City - Le rôle stratégique des acteurs publics
Smart City - Le rôle stratégique des acteurs publicsSmart City - Le rôle stratégique des acteurs publics
Smart City - Le rôle stratégique des acteurs publicsJérémie34
 
Introduction au cloud computing
Introduction au cloud computingIntroduction au cloud computing
Introduction au cloud computingStéphane Traumat
 
Search Engine Optimization
Search Engine Optimization Search Engine Optimization
Search Engine Optimization ch.ch
 
LNG FUEL & DUAL FUEL ENGINE
LNG FUEL & DUAL FUEL ENGINELNG FUEL & DUAL FUEL ENGINE
LNG FUEL & DUAL FUEL ENGINENguyen Tri
 
Network Meeting - Integration von Camunda mit Liferay
Network Meeting - Integration von Camunda mit LiferayNetwork Meeting - Integration von Camunda mit Liferay
Network Meeting - Integration von Camunda mit Liferaycamunda services GmbH
 
JUG Luzern: Open Source BPM mit BPMN 2.0 und Java
JUG Luzern: Open Source BPM mit BPMN 2.0 und JavaJUG Luzern: Open Source BPM mit BPMN 2.0 und Java
JUG Luzern: Open Source BPM mit BPMN 2.0 und Javacamunda services GmbH
 
Introduction to Oracle Grid Engine
Introduction to Oracle Grid Engine Introduction to Oracle Grid Engine
Introduction to Oracle Grid Engine Morteza Zakeri
 
Descubre cómo mejorar tu visibilidad local. El SEO y la Geolocalización
Descubre cómo mejorar tu visibilidad local.  El SEO y la GeolocalizaciónDescubre cómo mejorar tu visibilidad local.  El SEO y la Geolocalización
Descubre cómo mejorar tu visibilidad local. El SEO y la GeolocalizaciónCanal IP
 
Slidedeck Datenanalysen auf Speed - Oracle R Enterprise (ORE) Demo - DOAG Big...
Slidedeck Datenanalysen auf Speed - Oracle R Enterprise (ORE) Demo - DOAG Big...Slidedeck Datenanalysen auf Speed - Oracle R Enterprise (ORE) Demo - DOAG Big...
Slidedeck Datenanalysen auf Speed - Oracle R Enterprise (ORE) Demo - DOAG Big...Nadine Schoene
 
Testgetriebene Geschäftsprozessmodellierung
Testgetriebene GeschäftsprozessmodellierungTestgetriebene Geschäftsprozessmodellierung
Testgetriebene GeschäftsprozessmodellierungZambrovski Simon
 

En vedette (20)

Memoire de fin d'études pour le diplome de Chef de Projet Informatique et Rés...
Memoire de fin d'études pour le diplome de Chef de Projet Informatique et Rés...Memoire de fin d'études pour le diplome de Chef de Projet Informatique et Rés...
Memoire de fin d'études pour le diplome de Chef de Projet Informatique et Rés...
 
Projet de Fin d’Études - Écoles d'ingénieur informatique - Place de marché d'...
Projet de Fin d’Études - Écoles d'ingénieur informatique - Place de marché d'...Projet de Fin d’Études - Écoles d'ingénieur informatique - Place de marché d'...
Projet de Fin d’Études - Écoles d'ingénieur informatique - Place de marché d'...
 
Formacion camara-madrid-septiembre-2012
Formacion camara-madrid-septiembre-2012Formacion camara-madrid-septiembre-2012
Formacion camara-madrid-septiembre-2012
 
El SEO y la Geolocalización
El SEO y la GeolocalizaciónEl SEO y la Geolocalización
El SEO y la Geolocalización
 
Affinity Engine - Recommandations personnalisées - Offre Affinity Items
Affinity Engine - Recommandations personnalisées - Offre Affinity ItemsAffinity Engine - Recommandations personnalisées - Offre Affinity Items
Affinity Engine - Recommandations personnalisées - Offre Affinity Items
 
Affinity Engine - Recommandations personnalisées - Offre Affinity Items
Affinity Engine - Recommandations personnalisées - Offre Affinity ItemsAffinity Engine - Recommandations personnalisées - Offre Affinity Items
Affinity Engine - Recommandations personnalisées - Offre Affinity Items
 
Search Engine Advertising - Wir zeigen wie es funktioniert!
Search Engine Advertising - Wir zeigen wie es funktioniert!Search Engine Advertising - Wir zeigen wie es funktioniert!
Search Engine Advertising - Wir zeigen wie es funktioniert!
 
GtugDakar AppEngine, Gwt
GtugDakar AppEngine, GwtGtugDakar AppEngine, Gwt
GtugDakar AppEngine, Gwt
 
Economie du développement soutenable
Economie du développement soutenableEconomie du développement soutenable
Economie du développement soutenable
 
Recommandations avec Neo4j et le GraphAware Recommendation Engine
Recommandations avec Neo4j et le GraphAware Recommendation EngineRecommandations avec Neo4j et le GraphAware Recommendation Engine
Recommandations avec Neo4j et le GraphAware Recommendation Engine
 
Smart City - Le rôle stratégique des acteurs publics
Smart City - Le rôle stratégique des acteurs publicsSmart City - Le rôle stratégique des acteurs publics
Smart City - Le rôle stratégique des acteurs publics
 
Introduction au cloud computing
Introduction au cloud computingIntroduction au cloud computing
Introduction au cloud computing
 
Search Engine Optimization
Search Engine Optimization Search Engine Optimization
Search Engine Optimization
 
LNG FUEL & DUAL FUEL ENGINE
LNG FUEL & DUAL FUEL ENGINELNG FUEL & DUAL FUEL ENGINE
LNG FUEL & DUAL FUEL ENGINE
 
Network Meeting - Integration von Camunda mit Liferay
Network Meeting - Integration von Camunda mit LiferayNetwork Meeting - Integration von Camunda mit Liferay
Network Meeting - Integration von Camunda mit Liferay
 
JUG Luzern: Open Source BPM mit BPMN 2.0 und Java
JUG Luzern: Open Source BPM mit BPMN 2.0 und JavaJUG Luzern: Open Source BPM mit BPMN 2.0 und Java
JUG Luzern: Open Source BPM mit BPMN 2.0 und Java
 
Introduction to Oracle Grid Engine
Introduction to Oracle Grid Engine Introduction to Oracle Grid Engine
Introduction to Oracle Grid Engine
 
Descubre cómo mejorar tu visibilidad local. El SEO y la Geolocalización
Descubre cómo mejorar tu visibilidad local.  El SEO y la GeolocalizaciónDescubre cómo mejorar tu visibilidad local.  El SEO y la Geolocalización
Descubre cómo mejorar tu visibilidad local. El SEO y la Geolocalización
 
Slidedeck Datenanalysen auf Speed - Oracle R Enterprise (ORE) Demo - DOAG Big...
Slidedeck Datenanalysen auf Speed - Oracle R Enterprise (ORE) Demo - DOAG Big...Slidedeck Datenanalysen auf Speed - Oracle R Enterprise (ORE) Demo - DOAG Big...
Slidedeck Datenanalysen auf Speed - Oracle R Enterprise (ORE) Demo - DOAG Big...
 
Testgetriebene Geschäftsprozessmodellierung
Testgetriebene GeschäftsprozessmodellierungTestgetriebene Geschäftsprozessmodellierung
Testgetriebene Geschäftsprozessmodellierung
 

Similaire à Laravel yet another framework

Chef - Paris BlockCamp - Nov 09
Chef - Paris BlockCamp - Nov 09Chef - Paris BlockCamp - Nov 09
Chef - Paris BlockCamp - Nov 09Olivier Gutknecht
 
Rich Desktop Applications
Rich Desktop ApplicationsRich Desktop Applications
Rich Desktop Applicationsgoldoraf
 
Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...
Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...
Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...Jérôme Petazzoni
 
Communications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHPCommunications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHPjulien pauli
 
08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur web08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur webNoël
 
Apache flink - prise en main rapide
Apache flink - prise en main rapideApache flink - prise en main rapide
Apache flink - prise en main rapideBilal Baltagi
 
SOLID : les principes à l’origine du succès de Symfony et de vos applications
SOLID : les principes à l’origine du succès de Symfony et de vos applicationsSOLID : les principes à l’origine du succès de Symfony et de vos applications
SOLID : les principes à l’origine du succès de Symfony et de vos applicationsVladyslav Riabchenko
 
Comment relire du code pourri sans se fatiguer
Comment relire du code pourri sans se fatiguerComment relire du code pourri sans se fatiguer
Comment relire du code pourri sans se fatiguerDamien Seguy
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinLudovic Piot
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide
 
hassclic270.ppt
hassclic270.ppthassclic270.ppt
hassclic270.pptadiouf2
 
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...Alexandre Touret
 
Retours Devoxx France 2016
Retours Devoxx France 2016Retours Devoxx France 2016
Retours Devoxx France 2016Antoine Rey
 
S2-01-PHP.pptx
S2-01-PHP.pptxS2-01-PHP.pptx
S2-01-PHP.pptxkohay75604
 
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...Alexandre Touret
 
2013 01-08-php-maturite
2013 01-08-php-maturite2013 01-08-php-maturite
2013 01-08-php-maturiteRémi Alvado
 
Docker nice meetup #1 construire, déployer et exécuter vos applications, ...
Docker nice meetup #1   construire, déployer et exécuter vos applications, ...Docker nice meetup #1   construire, déployer et exécuter vos applications, ...
Docker nice meetup #1 construire, déployer et exécuter vos applications, ...adri1s
 

Similaire à Laravel yet another framework (20)

Chef - Paris BlockCamp - Nov 09
Chef - Paris BlockCamp - Nov 09Chef - Paris BlockCamp - Nov 09
Chef - Paris BlockCamp - Nov 09
 
Infrastructure as code drupal
Infrastructure as code drupalInfrastructure as code drupal
Infrastructure as code drupal
 
Rich Desktop Applications
Rich Desktop ApplicationsRich Desktop Applications
Rich Desktop Applications
 
Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...
Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...
Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...
 
Communications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHPCommunications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHP
 
08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur web08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur web
 
Apache flink - prise en main rapide
Apache flink - prise en main rapideApache flink - prise en main rapide
Apache flink - prise en main rapide
 
SOLID : les principes à l’origine du succès de Symfony et de vos applications
SOLID : les principes à l’origine du succès de Symfony et de vos applicationsSOLID : les principes à l’origine du succès de Symfony et de vos applications
SOLID : les principes à l’origine du succès de Symfony et de vos applications
 
Comment relire du code pourri sans se fatiguer
Comment relire du code pourri sans se fatiguerComment relire du code pourri sans se fatiguer
Comment relire du code pourri sans se fatiguer
 
12-Factor
12-Factor12-Factor
12-Factor
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
 
hassclic270.ppt
hassclic270.ppthassclic270.ppt
hassclic270.ppt
 
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
 
Retours Devoxx France 2016
Retours Devoxx France 2016Retours Devoxx France 2016
Retours Devoxx France 2016
 
S2-01-PHP.pptx
S2-01-PHP.pptxS2-01-PHP.pptx
S2-01-PHP.pptx
 
Rails 3 au Djangocong
Rails 3 au DjangocongRails 3 au Djangocong
Rails 3 au Djangocong
 
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
 
2013 01-08-php-maturite
2013 01-08-php-maturite2013 01-08-php-maturite
2013 01-08-php-maturite
 
Docker nice meetup #1 construire, déployer et exécuter vos applications, ...
Docker nice meetup #1   construire, déployer et exécuter vos applications, ...Docker nice meetup #1   construire, déployer et exécuter vos applications, ...
Docker nice meetup #1 construire, déployer et exécuter vos applications, ...
 

Laravel yet another framework

  • 1. Laravel: Yet another Framework @lahaxe_arnaud 1
  • 2. Présentation (1/3) - Créé par Taylor Otwell - En 2011 - Inspiré de Django, Ruby on rails, python, Symfony 2… 2 @taylorotwell Trust me I'm an engineer
  • 3. Présentation (2/3) - Composant Symfony 2 (13/28) BrowserKit, Console, CssSelector, Debug, DomCrawler, EventDispatcher, Filesystem, Finder, HttpFoundation, HttpKernel, Process, PropertyAccess, Routing, Translation - Les composants sont wrappés pour fournir une API simple et intuitive 3
  • 4. Présentation (2/3) - Le meilleur de PHP: - Namespace - Closure - Méthodes magiques - Interface - Trait - Respect des standards de la FIG https://github.com/php-fig/fig-standards 4
  • 6. Framework - IoC (1/4) Inversion Of Control container Le principe est de découpler les liens de dépendances entre objets. Ainsi les dépendances entre composants logiciels ne sont plus exprimées dans le code de manière statique mais déterminées dynamiquement à l'exécution. Wikipedia 6
  • 7. Framework - IoC (2/4) 7 class Car { public function start() { $engine = new Engine(); $engine->vroom(); } } $car = new Car(); $car->start();
  • 8. Framework - IoC (3/4) 8 class Car { protected $engine; public function __construct(Engine $engine) { $this->engine = $engine; } public function start() { $this->engine->vroom(); } } $car = App::make('Car'); $car->start(); Le container va par défaut lui-même créer et injecter l’instance de Engine
  • 9. Framework - IoC (4/4) Ok et alors ? 9 App::bind('Engine', function () { return new MockEngine(); });
  • 10. Framework - Facade 10 Design Pattern Facade: - Config - Request - Response - Queue - Cache - ... Basé sur l’IoC Abstraction / l’implémentation
  • 11. Migration (1/2) class CreateUserTable extends Migration { public function up() { Schema::create('users', function ($table) { $table->increments('id'); $table->string('username'); $table->string('email')->unique(); $table->string('password'); $table->string('remember_token') ->nullable()->default(null); $table->timestamps(); }); } public function down() { Schema::drop('users'); } } 11 ● Table schema versioning ● Migration rollback ● Compatible Mysql/Sqlite/PgSQL… ● Gestion des index, foreign key, cascade, default…
  • 13. Eloquent 13 ORM - Active record - Gestion des relations hasMany, belongTo… - Pagination - Chunk - Gestion lazy and eager loading - Soft delete - ... class Beer extends Eloquent { public function brand() { return $this->belongsTo('Brand'); } } $collection = Beer::where('alcohol', '>', 5)->take(10)->get(); $paginator = Beer::where('alcohol', '<', 10)->paginate(); $beer = Beer::with('brand')->find(1); // eager $brand = Beer::find(1)->brand; // brand() return Collection $beer->name = "Unicorn"; $beer->save(); $beer->delete();
  • 14. Cache 14 Les classiques get, put, flush… Mais aussi des fonctionnalités plus avancées: - remember - forever - tags - increment / decrement Support natif de redis, memcached, apc, fichiers et base de données $value = Cache::remember('posts', $minutes, function() { return Post::all(); }); Cache::tags('people', 'authors')->put('John', $john, $minutes); Cache::tags('authors')->flush(); Post::cacheTags('post')->remember(5)->where(['author_id' => 2]);
  • 15. Queues 15 Diminution du temps de réponse Api simple et unique Plusieurs services en build-in: - Beanstalkd - Iron.ion - Simple Amazon Queue - Redis Queue::push('SendEmail', array('message' => $message)); Queue::bulk(array('SendEmail', 'NotifyUser'), $payload); Queue::later($date, 'SendEmail@send', array('message' => $message)); class SendEmail { public function fire($job, $data) { /* … */ } } php artisan queue:work php artisan queue:listen /* Works with supervisor */
  • 16. Autres Goodies 16 Routeur RestFull et ressource Events Mails Authentification Configuration / environnement Moteur de template (Blade) Database migration Facturation / paiement … …
  • 18. Laravel 5 18 ● PSR 4 ● Ajout des “Contacts” ● Middelware ● Amélioration de “l’injecteur” de dépendances ● Laravel Socialize ● Form Request
  • 19. Laravel 5 19 ● Annotations pour routage / middleware ○ désactivé par défaut ● Cache des routes /** * @Get("/") */ /** * @Middleware("guest", except={"logout"}) */
  • 20. Laravel 5 20 ● Suppression de certains composants purement web ● OAuth ● Less
  • 21. Laravel 4 vs Laravel 5 21 ● Contrôle simplifié des accès ● global.php moins fourre tout ● Formalisation de la validation des forms ● Handlers pour éviter la duplication de code ○ Bus ● Générateurs
  • 22. Capitaliser le code 22 ● Développement modulaire ● OpenSource ou non ● Installable via composer "require": { "lahaxearnaud/laravel-token": "~0.5", ... },
  • 23. Capitaliser le code 23 Un workbench peux contenir: - des migrations - des modèles - des contrôleurs - … Mais surtout des tests ;(
  • 24. Ressources utiles 24 ● Ubuntu 14.04 ● PHP 5.6 ● HHVM ● Nginx ● MySQL ● Postgres ● Node (With Bower, Grunt, and Gulp) ● Redis ● Memcached ● Beanstalkd ● … laravel/homestead
  • 26. Ressources utiles 26 laravelbook/ardent class User extends LaravelBookArdentArdent { public static $rules = array( 'name' => 'required|between:4,16', 'email' => 'required|email', 'password' => 'required|alpha_num|between:4,8|confirmed', 'password_confirmation' => 'required|alpha_num|between:4,8', ); }
  • 27. Ressources utiles 27 Former::horizontal_open() ->id('MyForm') ->secure() // token CSRF ->populate($user) ->rules(User::$rules) // ardent rules ->method('POST'); Former::xlarge_text('name') ->class('myclass') ->value('Joseph'); Former::textarea('bio') ->rows(10)->columns(20) ->autofocus(); Former::actions() ->large_primary_submit('Submit') ->large_inverse_reset('Reset'); Former::close(); Anahkiasen/former
  • 29. Ressources utiles 29 barryvdh/laravel-ide-helper /** * User * * @property integer $id * @property string $username * @property string $email * @property string $password * ... * @property CarbonCarbon $updated_at * @method static IlluminateDatabaseQueryBuilder|User whereId($value) * ... */
  • 30. Laravel Vs Symfony 30 http://systemsarchitect.net/ ab -c 20 -n 50 http://site.dev Laravel 135.9 req/s Symfony2 39.22 req/s
  • 32. Laravel Vs Symfony 32 Symfony 2 Laravel 4 Phpmetrics
  • 33. Laravel Vs Symfony 33 Laravel Symfony Forge eZ Publish Snappy Composer October CMS Magento Invoice Ninja Drupal
  • 34. Conclusion 34 - Bâti sur de bonnes bases - Bonne communauté - Construit pour être testable - Popularité grandissante - Plus mature dans sa version 5