Laravel 5

Cours Laravel 5.3 – les bases – installation et organisation

Dans ce chapitre nous allons voir comment créer une application Laravel et comment le code est organisé dans une application.

Pour utiliser Laravel et suivre ce chapitre et l’ensemble du cours vous aurez besoin d’un serveur équipé de PHP avec au minimum la version 5.6.4 et aussi de MySQL. Nous avons vu dans le précédent chapitre les différentes possibilités.

Quelle que soit l’application que vous utilisez, vérifiez que vous avez la bonne version de PHP (minimum 5.6.4). D’autre part les extensions PDO, Tokenizer, OpenSSL et Mbstring de PHP doivent être activées.

Créer une application Laravel

Prérequis

Composer fonctionne en ligne de commande. Vous avez donc besoin de la console (nommée Terminal ou Konsole sur OS X et Linux). Les utilisateurs de Linux sont très certainement habitués à l’utilisation de la console mais il en est généralement pas de même pour les adeptes de Windows. Pour trouver la console sur ce système il faut chercher l’invite de commande :

Trouver la console dans Windows

Installation avec composer

Il y a plusieurs façons de créer une application Laravel. La plus classique consiste à utiliser la commande create-project de composer. Par exemple je veux créer une application dans un dossier laravel5 à la racine de mon serveur, voici la syntaxe à utiliser :

composer create-project --prefer-dist laravel/laravel laravel5

L’installation démarre et je n’ai plus qu’à attendre quelques minutes pour que composer fasse son travail jusqu’au bout. Vous verrez s’afficher une liste de téléchargements. Au final on se retrouve avec cette architecture :

Architecture des dossiers de Laravel

On peux vérifier que tout fonctionne bien avec l’URL http://localhost/laravel5/public. Normalement on doit obtenir cette page très épurée :

Page d'accueil de Laravel

Pour les mises à jour ultérieures il suffit encore d’utiliser composer avec la commande update :

composer update

Installation avec Laravel Installer

Une autre solution pour installer Laravel consiste à utiliser l’installeur. Il faut commencer par installer globalement l’installeur avec composer :

composer global require "laravel/installer"

Il faut ensuite informer la variable d’environnement path de l’emplacement du dossier …/composer/vendor/bin.

Pour créer une application il suffit de taper :

laravel new monAppli

Laravel sera alors installé dans le dossier monAppli.

Installation avec Laragon

Une façon encore plus simple pour installer Laravel est d’utiliser Laragon avec le menu :

Créer une application Laravel avec Laragon

On vous demande alors le nom du projet (donc du dossier) :

Chois du nom du projet

Et ensuite vous n’avez plus qu’à attendre ! La console s’ouvre et vous pouvez suivre le déroulement des opérations :

Déroulement de l'installation

On vous rappelle la commande de composer et en plus une base de données et automatiquement créée avec le même nom !

Autorisations

Au niveau des dossiers de Laravel, les seuls qui ont besoin de droits d’écriture par le serveur sont storage (et ses sous-dossiers), et bootstrap/cache .

Serveur

Pour fonctionner correctement, Laravel a besoin de PHP :

  • Version >= 5.5.9,

  • Extension PDO,

  • Extension Mbstring,

  • Extension OpenSSL,

  • Extension Tokenizer,

  • Extension XML.‌

Laravel est équipé d’un serveur sommaire pour le développement qui se lance avec cette commande :

php artisan serve

On y accède à cette adresse : http://localhost:8000. Mais évidemment pour que ça fonctionne il faut que vous ayez PHP installé.

Des URL propres

Pour un serveur Apache il est prévu dans le dossier public un fichier .htaccess avec ce code :

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>

Le but est essentiellement d’éviter d’avoir index.php dans l’url. Mais pour que ça fonctionne il faut activer le module mod_rewrite.

Organisation de Laravel

Maintenant qu’on a un Laravel tout neuf et qui fonctionne voyons un peu ce qu’il contient…

Dossier app

Ce dossier contient les éléments essentiels de l’application :

Le dossier app

 

  • Console : toutes les commandes en mode console,

  • Http : tout ce qui concerne la communication : contrôleurs, middlewares (il y a 3 middlewares de base qui servent à filtrer les requêtes HTTP) et le kernel,

  • Providers : tous les fournisseurs de services (providers), il y en a déjà 5 au départ. Les providers servent à initialiser les composants.

  • User : un modèle qui concerne les utilisateurs pour la base de données.

Évidemment tout cela doit vous paraître assez nébuleux pour le moment mais nous verrons en détail ces éléments au fil du cours. Et on verra d’ailleurs que seront créés bien d’autres dossiers selon nos besoins.

Autres dossiers

Autres dossiers

Voici une description du contenu des autres dossiers :

  • bootstrap : scripts d’initialisation de Laravel pour le chargement automatique des classes, la fixation de l’environnement et des chemins, et pour le démarrage de l’application,

  • public : tout ce qui doit apparaître dans le dossier public du site : images, CSS, scripts…

  • config : toutes les configurations : application, authentification, cache, base de données, espaces de noms, emails, systèmes de fichier, session…

  • database : migrations et populations,

  • resources : vues, fichiers de langage et assets (par exemple les fichiers LESS ou Sass),

  • routes : la gestion des urls d’entrée de l’application,

  • storage : données temporaires de l’application : vues compilées, caches, clés de session…

  • tests : fichiers de tests unitaires.

  • vendor : tous les composants de Laravel et de ses dépendances (créé par composer),

Fichiers de la racine

Il y a un certain nombre de fichiers dans la racine dont voici les principaux :

  • artisan : outil en ligne de Laravel pour des tâches de gestion,

  • composer.json : fichier de référence de composer,

  • package.json : fichier de référence de npm pour les assets,

  • phpunit.xml : fichier de configuration de phpunit (pour les tests unitaires),

  • .env : fichier pour spécifier l’environnement d’exécution.

Accessibilité

Pour des raisons de sécurité sur le serveur seul le dossier public doit être accessible :

Le dossier public est le seul accessible

Cette configuration n’est pas toujours possible sur un serveur mutualisé, il faut alors modifier un peu Laravel pour que ça fonctionne; j’en parlerai dans le chapitre sur le déploiement.

Environnement et messages d’erreur

Par défaut lorsque vous installez Laravel, celui-ci est en mode « debug ». Au niveau de l’affichage des erreurs si vous entrez une url qui n’est pas prévue vous allez obtenir quelque chose comme ceci :

Un message d'erreur en mode

Pendant la phase de développement on a besoin d’obtenir des messages explicites pour traquer les erreurs inévitables que nous allons faire. En mode « production » il faudra changer ce mode, pour cela ouvrez le fichier config/app.php et trouvez cette ligne :

'debug' => env('APP_DEBUG', false),
Autrement dit on va chercher la valeur dans l’environnement, mais où peut-on le trouver ? Regardez à la racine des dossiers, vous y trouvez le fichier .env :
Le fichier de l'environnement

Avec ce contenu :

APP_ENV=local
APP_KEY=base64:N/QruoORs/RqZdvcIWgyB8bVCWIYzMebPmnHX/g/J7A=
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://localhost

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

PUSHER_KEY=
PUSHER_SECRET=
PUSHER_APP_ID=

Vous remarquez que dans ce fichier la variable APP_DEBUG a la valeur true. On va la conserver ainsi puisqu’on veut être en mode « debug ». Vous êtes ainsi en mode débogage avec affichage de messages d’erreur détaillés. Si vous la mettez à false (ou si vous la supprimez), avec une URL non prévue vous obtenez maintenant juste :

Un message d'erreur en mode

Il ne faudra évidemment pas laisser la valeur true lors d’une mise en production ! On en reparlera lorsqu’on verra la gestion de l’environnement. Vous ne risquerez ainsi plus d’oublier de changer cette valeur parce que Laravel saura si vous êtes sur votre serveur de développement ou sur celui de production.

D’autre part il y a un fichier qui collecte les erreurs (Log), vous le trouvez ici :

Le fichier des erreurs

Par défaut il n’y a qu’un fichier mais si vous préférez avoir un fichier par jour par exemple il suffit d’ajouter cette ligne dans le fichier .env :

APP_LOG=daily

De la même manière par défaut Laravel stocke toutes les erreurs. C’est pratique dans la phase de développement mais en production vous pouvez limiter le niveau de sévérité des erreurs retenues (mode debug), par exemple si vous vous contentez des warning :

APP_LOG_LEVEL=warning

Laravel utilise le composant Monolog pour la gestion des erreurs. reportez-vous à sa documentation si vous avez besoin de plus d’informations. La documentation de Laravel en résume l’essentiel ainsi que son adaptation au framework.

Le composant Html

Dans la version 4 de Laravel il y avait directement le composant Html qui permet de créer facilement des formulaires et qui offre un lot d’helpers pour l’écriture du Html. Dans la version 5 ce composant n’est pas chargé par défaut. Comme nous en aurons besoin dans ce cours, une fois que vous avez réussi à installer une application toute neuve de Laravel vous allez modifier ainsi le fichier composer.json :

"require": {
    "php": ">=5.6.4",
    "laravel/framework": "5.3.*",
    "laravelcollective/html": "5.3.*"
},

On demande ainsi à composer de charger le composant laravelcollective/html. Lancez alors une mise à jour :

composer update

Attendez la fin du chargement.

Il faut ensuite ajouter cette ligne dans le fichier config/app.php dans la section des providers :

<?php
'providers' => [
    // ...
    Collective\Html\HtmlServiceProvider::class,
    // ...
],

Et ces 2 lignes dans la section des alias :

'aliases' => [
    //...
    'Form' => Collective\Html\FormFacade::class,
    'Html' => Collective\Html\HtmlFacade::class,
    //...
],

Ainsi vous allez disposer de ce composant bien utile ! D’autre part vous savez maintenant comment on ajoute un composant à Laravel.

En résumé

  • Pour son installation et sa mise à jour Laravel utilise le gestionnaire de dépendances composer.

  • La création d’une application Laravel se fait à partir de la console avec une simple ligne de commande.

  • Laravel est organisé en plusieurs dossiers.

  • Le dossier public est le seul qui doit être accessible pour le client.

  • L’environnement est fixé à l’aide du fichier .env.

  • Par défaut Laravel est en mode « debug » avec affichage de toutes les erreurs.

  • Le composant ‌laravelcollective/html n’est pas prévu par défaut, il faut le charger indépendamment.

Print Friendly, PDF & Email

9 commentaires

  • corentin

    Bonjour, je n’arrive pas à charger le composant laravelcollective/html. Il est bien installé et présent dans le dossier vendor. Lorsque je veux afficher mes vues les éléments blade ne fonctionnent pas !
    Voici un exemple d’affichage :
    @extends(‘layouts.app’) @section(‘content’)
    Dashboard
    You are logged in!
    @endsection
    Merci d’avance pour votre réponse !

  • zero-tech

    Bonjour. j’ai besoin d’aide. Quand je lance la commande : php artisan serve, j’ai ce résultat
    [Symfony\Component\Debug\Exception\FatalThrowableError]
    Class ‘    Collective\Html\HtmlServiceProvider’ not found
    .Merci d’avance

      • zero-tech

        Bonjour,
        oui il a été bien installé avec Composer.
        J’ai essayé de créer un nouveau projet en spécifiant la version 5.3.* et ça marche. Mais dès que je ne spécifie pas la version ( donc Composer installera la dernière version ) ça affiche ce message d’erreur. En ce moment je travaille avec la version 5.3 qui marche pour suivre votre Tuto, mais j’aimerai quand même savoir à quoi est du ce problème.

        En passant je suis un Fan de vous. Je vous suivais sur OpenClassrooms. Vos Tutos sont juste simples et précis. Thanks a lot.

        • bestmomo

          Ah là je comprends mieux 🙂

          Pour faire fonctionner avec Laravel 5.4 il faudrait dans composer.json aussi mettre à niveau laravelcollective :

          "laravelcollective/html": "5.4.*",

          Mais il y aura d’autres problèmes et il vaut mieux suivre les articles avec la version 5.3.

          Je suis en train de créer une application avec la version 5.4 mais comme je la veux super bien codée ça prend du temps, peut-être même que finalement elle sortira pour la version 5.5 qui commence à pointer son nez.

          Merci d’apprécier mon travail 😉

Laisser un commentaire