Laravel, PHP, Framework – Introduction à Laravel PHP Framework


Voilà un framework intéressant et élégant, une synthèse habile tant au niveau marketing qu’au niveau du code entre Symfony et CodeIgniter, beaucoup d’emprunts à RoR (merci 37signals).
Comme à chaque fois, compte tenu de sa naissance tardive, Laravel essaye de repousser plus loin encore les limites du Framework MVC en PHP et y parvient dans une certaine mesure sur de très nombreux aspects.

Une pointe d’élégance

A noter, l’élégance n’est pas sans rappeler le CMS TextPattern dans un genre tout à fait différent. En effet, le code semble avoir été livré par d’excellents developpeurs, à ce niveau on parle plutôt de « software architect », qui ne néglige pas pour autant l’esthétique :

  • Un code limpide, très grande simplicité, très minimaliste, très DRY et didactique la courbe d’apprentissage s’en trouve donc grandement facilité.
  • Une documentation intuitive et efficace, bien écrite et amusante !
  • Une terminologie choisie, le concepteur a du faire un cours de français dans ses jeunes années car l’ensemble de la terminologie de Laravel est en Français. Cela donne un petit vernis Luxe qui n’est pas sans déplaire. Ne manque plus que Charlize Theron comme contributrice et la boucle sera bouclée.

Cela peut sembler très anodin mais les élément citées plus hauts sont parfois déterminants dans l’adoption et la vulgarisation, le marketing disons-le. En donnant cette sensation de manufacture, de qualité, ce framework n’a pas vocation uniquement à s’adresser aux nerds et à toutes les chances de séduire au-de-là du cercle des initiés. Toutefois, pour contrebalancer cette affirmation, les choses trop esthétiques, notamment en matière de framework, ne sont pas forcement les plus adoptées. Trop chichiteuses, trop prétentieuses, cela semble parfois nuire au caractère sérieux de la chose en question. Passons, on peut quand se feciliter de cette initiative louable. Pour information, je vous invite à lire en anglais, la profession de foi des créateurs de Laravel, c’est éloquent :

Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable, creative experience to be truly fulfilling. Laravel attempts to take the pain out of development by easing common tasks used in the majority of web projects, such as authentication, routing, sessions, and caching.

Laravel aims to make the development process a pleasing one for the developer without sacrificing application functionality. Happy developers make the best code. To this end, we’ve attempted to combine the very best of what we have seen in other web frameworks, including frameworks implemented in other languages, such as Ruby on Rails, ASP.NET MVC, and Sinatra.

Laravel is accessible, yet powerful, providing powerful tools needed for large, robust applications. A superb inversion of control container, expressive migration system, and tightly integrated unit testing support give you the tools you need to build any application with which you are tasked.

Source : readme.md

Les rudiments sur Laravel

Sans s’appesantir sur l’installation, il vous faut télécharger Laravel, dezipper puis installer sur un serveur. Dans notre exemple, on place le répertoire nommé laravel-master dans un MAMP et on a crée une Base de données du nom de demo-laravel.

A l’inverse de CI (CodeIgniter), l’installation n’est pas si trivial et demande un peu de travail. Expédions tout d’abord, les deux points les plus faciles : la base de données (BDD), le chemin sur le serveur (sur MAMP). On se garde le plus délicat pour la fin : l’installation de Composer.

1. Laravel – la base de données

  --
  -- Base de données: `demo-laravel`
  --
  CREATE DATABASE IF NOT EXISTS `demo-laravel` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

2. Laravel – Le chemin du répertoire
Une fois le répertoire dezippé, on le copie-colle sur la racine du serveur MAMP, [path_on_your_serveur]/laravel-master/. Dans notre exemple, on nomme le répertoire my-laravel

3. Laravel – Installer le Composer
Bon, après ces deux choses relativement importantes effectuées, on ne peut toujours pas commencer à découvrir Laravel et effectuer une petite migration par exemple. Il reste à installer le très sérieux composer, essentiel au bon fonctionnement de Laravel car vous avez toutes les chances d’avoir cette erreur classique ci-dessous.

L’erreur classique

Fatal error: require(): Failed opening required '/Applications/MAMP/htdocs/my-laravel/bootstrap/../vendor/autoload.php' (include_path='.:') in /Applications/MAMP/htdocs/my-laravel/bootstrap/autoload.php on line 17

Voici comment brutalement, on va corriger deux problèmes en un : l’erreur classique et le fait que Mac OSX est livrée avec une version de PHP pas à jour pour utiliser Laravel.

Laravel, PHP, Framework - Introduction à Laravel PHP Framework

Laravel, PHP, Framework - Introduction à Laravel PHP Framework

Laravel, PHP, Framework - Introduction à Laravel PHP Framework

Laravel, PHP, Framework - Introduction à Laravel PHP Framework

Régler son compte à votre version de PHP ou une pierre, 2 coups

Plutôt que de se risquer à une mise à jour de PHP sur Mac OSX via Homebrew par exemple, on choisit la solution de facilité. On change la version de PHP, accessible via la console, c’est à dire par défaut du Mac OSX, en faisant pointer la commande php vers la version 5.5.3 disponible dans MAMP. Vous aurez de fait disponible l’extension Mcrypt PHP extension, nécessaire au fonctionnement de Laravel.

Se mettre à la racine

cd ~/[votre-nom-d-utilisateur]

Editer votre profil bash

vi .bash_profile

Ajouter cette ligne

# Added to change the path to update the PHP version but still using MAMP
export PATH=/Applications/MAMP/bin/php/php5.5.3/bin:$PATH

Laisser reposer…. Non, le mieux est de redémarrer et ensuite de vérifier si vos commandes ont bien prises en compte. Voici les 3 types de vérifications possibles.

Vérification 1

which php
/Applications/MAMP/bin/php/php5.5.3/bin/php

Vérification 2

php --ini
Configuration File (php.ini) Path: /Applications/MAMP/bin/php/php5.5.3/conf
Loaded Configuration File:         /Applications/MAMP/bin/php/php5.5.3/conf/php.ini

Vérification 3

php -v
PHP 5.5.3 (cli) (built: Dec 16 2012 14:31:13) 
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2013 Zend Technologies with Zend OPcache v7.0.3-dev, Copyright (c) 1999-2013, by Zend Technologies

Vous pensez enfin pouvoir profiter un peu de Laravel, que nenni ! Il reste à installer le Composer

Installer Composer (Dependency Manager for PHP) pour Laravel

Il faut ensuite se rendre dans le répertoire d’installation de Laravel via la console via cette commande et lancer Composer.

cd /Applications/MAMP/htdocs/my-laravel

On va chercher le Composer dans sa tanière, via la commande suivante, à taper dans la console.
curl -s getcomposer.org/installer | php -d detect_unicode=Off

Dans la console, peu importe où vous trouvez sur votre disque, nous allons ensuite faire de Composer, un élément accessible de n’importe sur notre système. Pour se faire, voici la commande à passer.
mv /[path_to_your_file]/composer.phar /usr/local/bin/composer

Et voilà… L’installation de Laravel qui était censé être un formalité, se révèle plus complexe que prévu. Rien d’étonnant, on est dans la vraie vie pas dans un dépliant commercial.

Source: http://laravel.com/docs/installation

Laravel – Les principes de migration

Commençons par le commencement pour appréhender les principes de migration, on change la BDD et on connecte Laravel à notre nouvelle Base demo-laravel dans [path_on_your_serveur]/laravel-master/app/config/database.php.

Le fichier database.php

  'mysql' => array(
		'driver'    => 'mysql',
		'host'      => 'localhost',
		// 'database'  => 'database',
		'database'  => 'demo-laravel',
		'username'  => 'root',
		'password'  => '',
		'charset'   => 'utf8',
		'collation' => 'utf8_unicode_ci',
		'prefix'    => '',
	),

Source : /path_on_your_serveur_laravel_master]/app/config/database.php

Laravel, PHP, Framework - Introduction à Laravel PHP Framework

Laravel, PHP, Framework - Introduction à Laravel PHP Framework

Laravel, PHP, Framework - Introduction à Laravel PHP Framework

Laravel, PHP, Framework - Introduction à Laravel PHP Framework

Il faut nécessairement ouvrir une console, car nous allons nous servir du « sésame » une fois dans la console à savoir artisan pour utiliser les fonctionnalités de migration de Laravel.

Migrate – UP (procédure de migration)

commande 1

php artisan migrate:install

commande 2

php artisan migrate:make create_users_table

commande 3

php artisan migrate

2014_01_02_064430_create_users_table.php
Voir dans /Applications/MAMP/htdocs/my-laravel/app/database/2014_01_02_064430_create_users_table.php

    use Illuminate\Database\Migrations\Migration;
 
    class CreateUsersTable extends Migration {
 
    	/**
    	 * Run the migrations.
    	 *
    	 * @return void
    	 */
    	public function up()
    	{
    		/* Add some schema */
    		Schema::create('authors', function($table) {
 
    		              // ENGINE=MyISAM
    		              $table->engine = "MyISAM";
                      // auto increment id (primary key)
                      $table->increments('id');
                      $table->string('name');
                      $table->integer('age')->nullable();
                      $table->boolean('active')->default(1);
                      $table->integer('role_id')->unsigned();
                      $table->text('bio');
                      // created_at, updated_at DATETIME
                      $table->timestamps();
                  });
 
    	}
 
    	/**
    	 * Reverse the migrations.
    	 *
    	 * @return void
    	 */
    	public function down()
    	{
    		/* Add some scheam */
    		Schema::drop('authors');
    	}
 
    }

L’équivalent en SQL – 2014_01_02_064430_create_users_table.sql

  --
  -- Structure de la table `authors`
  --
 
  CREATE TABLE `authors` (
    `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL,
    `age` INT(11) DEFAULT NULL,
    `active` tinyint(1) NOT NULL DEFAULT '1',
    `role_id` INT(10) UNSIGNED NOT NULL,
    `bio` text COLLATE utf8_unicode_ci NOT NULL,
    `created_at` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
    `updated_at` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
    PRIMARY KEY (`id`)
  ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

Migrate – DOWN (procédure de rollback)

commande 1

php artisan migrate:rollback

Source : http://laravel.com/docs/schema

Source : http://laravelbook.com/laravel-migrations-managing-databases/

Faute de temps

Comme l’installation a pris du temps, on remet à plus tard 3 autres points essentiels du framework :

  1. L’exploration de l’ORM de laravel nommé eloquent
  2. Le passage à la vitesse supérieure, en utilisant le principe des tasks pour accélérer le processus de création en MVC. Tasks est un truc assez connu dans Kohana.
  3. Le système de Templating de Laravel : Blade.

Toutefois, hormis, l’absence d’une installation « plug and play », le framework est clairement la relève de CodeIgniter et un outsider sérieux aux autres Frameworks notamment l’incontournable Symfony. A suivre.

En savoir plus