Hello, You

Si vous avez suivi le tutoriel Hello, World, alors vous êtes prêt pour ce nouveau défi.

L'objectif est de proposer un formulaire permettant de saisir le nom de l'internaute afin de lui souhaiter la bienvenue par la suite.

Commençons par la vue

Dans application/templates créez un fichier nommé @base.html avec le contenu suivant :

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>{$title}</title>
    <link rel="stylesheet" href="public/css/w3.css">
    <style>
     body {
       padding: 3%;
     }
    </style>
  </head>
  <body>
    {block content}
    {/block}
  </body>
</html>

Le premier élément nouveau dans ce gabarit est l'utilisation d'une balise Latte. La balise {$title} permettra de définir le titre de la page (qui sera affiché dans la barre de titre du navigateur ou dans l'onglet de la page).

La deuxième nouveauté est la définition d'un bloc nommé content.

Le système de gabarits Latte supporte la notion d'héritage : les balises {block content} et {/block} permettent de définir un bloc nommé content qui sera surchargé dans les gabarits enfants.

Dans application/templates/home, créez un fichier nommé index.html avec le contenu suivant :

{layout '@base.html'}
{block content}
<form action="{=BASE_URL}sayhello" method="post" enctype="multipart/form-data" class="w3-container">
  <label for="name">Saisir votre nom</label>
  <input type="text" name="name" class="w3-input"><br>
  <input type="submit" name="submit" class="w3-btn w3-green" value="Envoyer">
</form>
{/block}

La balise {layout} permet d'indiquer que l'on hérite du gabarit de base @base.html.

Ici nous utilisons la constante prédéfinie BASE_URL via une balise Latte.

Créez à présent dans application/templates/home un fichier nommé sayhello.html avec le contenu suivant :

{layout '@base.html'}
{block content}
<p class="w3-panel">Hello, {$name} !</p>
{/block}

Le gabarit sayhello.html hérite également du gabarit de base @base.html.

La balise {name} permettra d'afficher le nom de l'internaute.

Implémentation des actions

Reprenons notre contrôleur HomeController et modifions le comme suit :

<?php
namespace controllers;

class HomeController extends \ActionController {

    public function doIndex() {}

    public function doSayHello() {
        $this->title = 'Hello, You !';
        $this->name = $this->request->getParameters()->getAlnum( 'name' );
    }
}

La méthode d'action doIndex() affiche le formulaire.

La méthode d'action doSayHello() affiche le nom de l'internaute après validation du formulaire.

Routage

Nous allons définir une nouvelle route.

Éditez config/routes.json et modifiez-le comme suit :

[
        ["GET", "", "controllers\\HomeController@index"],
        ["POST", "sayhello", "controllers\\HomeController@sayhello"]
]

Rendez vous sur l'URL http://localhost.