laravel yet another framework

35
Laravel: Yet another Framework @lahaxe_arnaud 1

Upload: lahaxe-arnaud

Post on 17-Jul-2015

698 views

Category:

Internet


4 download

TRANSCRIPT

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 \LaravelBook\Ardent\Ardent {

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 \Carbon\Carbon $updated_at

* @method static \Illuminate\Database\Query\Builder|\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

?>