Laravel – Première route

21 décembre 2017 - : MVC Laravel - : Pas de commentaire

Laravel – Première route

Nous allons ci-dessous créer notre page d’accueil et notre première route.

Pré-requis : le .htaccess

Afin de faire fonctionner les routes utilisées par le framework Laravel, nous allons utiliser le module de réécriture d’URL de notre serveur Apache.

Le fichier .htaccess contenu dans le dossier public est le suivant :

<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>

Mais que font ces différentes lignes ?

  • IfModule mod_rewrite.c : Vérifie si le module de réécriture existe
  • Options -MultiViews : désactive la négociation de contenu (qui permettrait, si activée, d’accéder à un fichier « fichier.html » en tapant http://monsite.fr/fichier
  • RewriteEngine On : Active le module de réécriture d’URL
  • RewriteCond : Décrit une condition qui, si elle est vérifiée, activera la RewriteRule qui suit
    • %{REQUEST_FILENAME} représente le chemin complet du fichier ou dossier qui est accédé
    • !-d : n’est pas un dossier
    • !-f : n’est pas un fichier
    • Nos conditions vérifient qu’on n’essaie d’accéder ni à un dossier, ni à un fichier. Nous réécrirons donc les URLs uniquement pour des dossiers virtuels (routes)
  • RewriteRule : Règle de réécriture de l’URL si les conditions sont vérifiées
    • Suit la syntaxe RewriteRule URL_a_réécrire URL_réécrite [drapeau]
    • ^ : utilisé seul, signifie que nous réécrirons toutes les URLs
    • . : correspond à 1 caractère
    • * : répète le caractère précédent de 0 à n fois (ainsi, (.*) correspondra à toutes les chaines de caractères)
    • $ : ferme la chaîne. Utilisé conjointement avec ^, ils ouvrent (^) et ferment ($) la chaîne de caractères
    • $1 : référence arrière. Correxpond au contenu d’une expression entre parenthèses qui se situe avant (ici (.*))
    • index.php : toutes les URLs réécrites seront index.php
    • [L] : L permet de stopper la réécriture après cette ligne (si d’autres RewriteCond et RewriteRule étaient présentes ensuite, elles ne seraient pas exécutées)
    • [R=301] : crée une redirection permanente
    • [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] : utilisé conjointement avec RewriteCond %{HTTP:Authorization} ., permet de gérer les autorisations.

Première route

Avec Laravel, nous allons écrire les routes dans le fichier web.php situé dans le dossier routes.

Par défaut, nous avons accès à une route pour la page d’accueil qui est écrite sous cette forme :

Route::get('/', function () {
    return view('welcome');
});
Langage : PHP - Fichier routes/web.php

Ces lignes permettent d’afficher la page d’accueil en suivant le principe du MVC.

Dans un premier temps, Laravel utilise des « façades » qui permettent de simplifier la syntaxe d’écriture.

Ici, nous utilisons la « façade » Route qui permet d’appeler le routeur.

Nous pourrions remplacer Route::get par $this->app[‘router’]->get qui est plus complexe mais donnera le même résultat.

Nous créons donc une route vers / (page d’accueil) qui utilisera la méthode get, et qui ne fera qu’une seule chose, afficher une vue.

Dans ce cas précis, nous avons écrit notre « contrôleur » directement dans le fichier web.php.

Nous verrons par la suite comment séparer ce contrôleur.

ATTENTION : Le contrôleur DOIT OBLIGATOIREMENT se terminer par un return

La vue

Notre contrôleur affiche la vue ‘welcome’ située dans le dossier resources/views.

La fonction view(‘welcome’) ira chercher le fichier welcome.blade.php situé dans le dossier resources/views, et le contrôleur l’affichera (return).

Ce fichier contient ceci

<!doctype html>
<html lang="{{ app()->getLocale() }}">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Laravel</title>
        <!-- Fonts -->
        <link href="https://fonts.googleapis.com/css?family=Raleway:100,600" rel="stylesheet" type="text/css">
        <!-- Styles -->
        <style>
            html, body {
                background-color: #fff;
                color: #636b6f;
                font-family: 'Raleway', sans-serif;
                font-weight: 100;
                height: 100vh;
                margin: 0;
            }
            .full-height {
                height: 100vh;
            }
            .flex-center {
                align-items: center;
                display: flex;
                justify-content: center;
            }
            .position-ref {
                position: relative;
            }
            .top-right {
                position: absolute;
                right: 10px;
                top: 18px;
            }
            .content {
                text-align: center;
            }
            .title {
                font-size: 84px;
            }
            .links > a {
                color: #636b6f;
                padding: 0 25px;
                font-size: 12px;
                font-weight: 600;
                letter-spacing: .1rem;
                text-decoration: none;
                text-transform: uppercase;
            }
            .m-b-md {
                margin-bottom: 30px;
            }
        </style>
    </head>
    <body>
        <div class="flex-center position-ref full-height">
            @if (Route::has('login'))
                <div class="top-right links">
                    @if (Auth::check())
                        <a href="{{ url('/home') }}">Home</a>
                    @else
                        <a href="{{ url('/login') }}">Login</a>
                        <a href="{{ url('/register') }}">Register</a>
                    @endif
                </div>
            @endif
            <div class="content">
                <div class="title m-b-md">
                    Laravel
                </div>
                <div class="links">
                    <a href="https://laravel.com/docs">Documentation</a>
                    <a href="https://laracasts.com">Laracasts</a>
                    <a href="https://laravel-news.com">News</a>
                    <a href="https://forge.laravel.com">Forge</a>
                    <a href="https://github.com/laravel/laravel">GitHub</a>
                </div>
            </div>
        </div>
    </body>
</html>
Langage : HTML - Fichier resources/views/welcome.blade.php

La syntaxe de ce fichier peut paraître déroutante à priori mais elle est relativement simple à appréhender et basée sur le moteur Blade.

Nous verrons dans un prochain article comment utiliser les différentes fonctions proposées par Blade.

Ce fichier contient le code html d’une page complète, du doctype à la balise /html.

Nous avons donc maintenant une meilleure compréhension de la mise en place d’une route et d’un contrôleur, et de l’affichage de la vue correspondante.

Commentaires

Ecrire un commentaire

Pas encore de commentaire

Laisser un commentaire