Un site Web avec Laravel

Les étapes

  1. Installation du plugin

    1. Faire la recherche Form Laravel Collective dans Google.
    2. Suivre le lien vers Laravel Collective.
    3. Suivre les instructions de la version voulue en fonction de la version de Laravel.
    4. À la maison
      1. Exécuter dans le terminal composer require laravelcollective/html
    5. Dans les laboratoires du Cégep
      1. Ouvrir le fichier /composer.json
      2. Ajouter dans la section 'require' la ligne suivante (avec la virgule) :
        "laravel/tinker": "~1.0",
        "laravelcollective/html":"^5.4.0"
      3. Dans le terminal faire composer update.
      4. Ouvrir le fichier /config/app.php et l'adapter comme suit :
        App\Providers\RouteServiceProvider::class,
        Collective\Html\HtmlServiceProvider::class,
        'View' => Illuminate\Support\Facades\View::class,
        'Form' => Collective\Html\FormFacade::class,
        'Html' => Collective\Html\HtmlFacade::class,
    6. Tester l'installation en mettant {{Form::open()}} dans une view. Si l'execution de la view ne cause pas d'erreur, l'installation est correcte.
  2. Ajouter le lien et la route

    1. Dans la view interface.menu, modifier un des liens pour mener vers l'action UserController@create : <a href="{{action('UserController@create')}}">Ajouter un usager</a>
    2. Créer la route correspondante.
      Route::get('/users/{user}', "UserController@show");
      Route::get('/users/create', "UserController@create");
    3. Tester et constater l'erreur
  3. Ajouter la contrainte de route

    1. Tester en inversant les routes show et create.
    2. À la fin de la route show ajouter la contrainte de route.
      Route::get('/users/{user}', "UserController@show")
      ->where('user', '[0-9]+');
    3. Tester différentes adresses : /users/1, /users/create et /users/patate.
  4. Le formulaire vide

    1. Dans le controller, ajouter l'appel à la view users.create.
    2. Créer un user vide et créer l'envoyer avec la view.
    3. Ajouter une valeur à la propriété province.
      public function create()
      {
      $user = new User();
      $user->province = "Québec";
      return view('users.create', ['user'=>$user]);
      }
    4. Créer la view users.create.
    5. Ajouter le titre et inclure la view users.form.
    6. Constater le non-besoin d'envoyer la variable $user lors de l'inclusion.
    7. Créer la view users.form.
    8. Y ajouter l'ouverture et la fermeture du formulaire : {{Form::open()}} et {{Form::close()}}.
    9. Regarder le code HTML du formulaire vide.
  5. Les premiers champs

    1. Dans la view form, créer le tableau vide avec une rangée, un <th> pour le label et un <td> pour champ de formulaire.
      <table border="1">
      <tbody>
      <tr>
      <th></th>
      <td></td>
      </tr>
      </tbody>
      </table>
    2. Dans le <th>, ajouter le label pour le champ nom en utilisant la classe Form. {{Form::label('nom', 'Nom')}}
    3. Dans le <td>, ajouter le champ text pour le nom. {{Form::text('nom')}}
    4. Ajouter une valeur par défaut comme 2e paramètre. {{Form::text('nom', 'Raté')}}.
    5. Ajouter l'attribute placeholder en ajoutant un array comme 3e paramètre. {{Form::text('nom', 'Raté', ['placeholder'=>'Nom'])}}.
    6. Répéter pour ajouter le champ province.
    7. Faire afficher les valeurs par défaut provenant de la variable $user : remplacer 'Raté' par $user->nom.
    8. Utiliser model à la place de open pour ouvrir le formulaire. {{Form::model($user)}}
    9. Enlever les placeholder et les valeurs par défaut. Tester et constater que la province s'affiche encore.
  6. Les autres champs

    1. Ajouter les autres champs.
      <tr>
      <th>{{Form::label('nom', 'Nom')}}</th>
      <td>{{Form::text('nom')}}</td>
      </tr>
      <tr>
      <th>{{Form::label('prenom', 'Prénom')}}</th>
      <td>{{Form::text('prenom')}}</td>
      </tr>
      <tr>
      <th>{{Form::label('name', 'Nom d\'usager')}}</th>
      <td>{{Form::text('name')}}</td>
      </tr>
      <tr>
      <th>{{Form::label('password', 'Mot de passe')}}</th>
      <td>{{Form::password('password')}}</td>
      </tr>
      <tr>
      <th>{{Form::label('email', 'Courriel')}}</th>
      <td>{{Form::email('email')}}</td>
      </tr>
      <tr>
      <th>{{Form::label('tel', 'Téléphone')}}</th>
      <td>{{Form::text('tel')}}</td>
      </tr>
      <tr>
      <th>{{Form::label('adresse', 'Adresse')}}</th>
      <td>{{Form::text('adresse')}}</td>
      </tr>
      <tr>
      <th>{{Form::label('ville', 'Ville')}}</th>
      <td>{{Form::text('ville')}}</td>
      </tr>
      <tr>
      <th>{{Form::label('province', 'Province')}}</th>
      <td>{{Form::text('province')}}</td>
      </tr>
      <tr>
      <th>{{Form::label('codepostal', 'Code Postal')}}</th>
      <td>{{Form::text('codepostal')}}</td>
      </tr>
      <tr>
      <th>{{Form::label('citation', 'Citation')}}</th>
      <td>{{Form::textarea('citation')}}</td>
      </tr>
    2. Utiliser le faker à la place d'un user vide dans le controller pour les tests (modifier le controller).
    3. Ajouter une rangée à la fin avec un seul <th>
    4. Mettre un champ submit.
  7. La réception des données

    1. Tester la page et constater l'erreur. Il manque la route pour l'action UserController@store.
    2. Dupliquer la route pour UserController@create et mettre store
    3. Remplacer get pour post afin que la route réagisse lorsque des données sont envoyées. Ne pas changer l'adresse de la route. Route::post('/users/create', "UserController@store");
    4. Dans l'action UserController@store, constater la variable $request. Faire retourner cette variable.
    5. Faire return $request->get('nom');
    6. Créer un nouveau user, y mettre le nom et le retourner.
      $user = new User();
      $user->nom = $request->get('nom');
      return $user;
    7. Récupérer toutes les données à l'aide de all. $donnees = $request->all();
    8. Appliquer les données au user à l'aide de fill. $user->fill($donnees);
    9. Constater l'absence des nouvelles données dans le user.
  8. La sauvegarde du user

    1. Dans le model User.php, ajouter les noms des champs dans la propriété fillable.
      protected $fillable = [
      'nom',
      'prenom',
      'name',
      'password',
      'email',
      'tel',
      'adresse',
      'ville',
      'province',
      'codepostal',
      'citation',
      ];
    2. Tester et constater le résultat.
    3. Faire sauvegarder le user $user->save(); et constater l'erreur.
    4. Réessayer avec le mot de passe dans le formulaire.
  9. La redirection

    1. Dans l'action UserController@store ajouter la redirection. return redirect()->action("UserController@show", $user);
    2. Tester avec un nouveau user.
  10. La modification et la suppression

    1. Utiliser l'étape terminée pour voir les changements apportés.
    2. Tester la modification et la suppression dans le fureteur.
    3. Regarder la view users.show. Deux liens ont été ajoutés.
      <p>
      <a href="{{action('UserController@edit', $user)}}">
      Modifier
      </a>
      |
      <a
      href="{{action('UserController@destroy', $user)}}"
      onclick="return confirm('Voulez-vous vraiment supprimer cet usager?')"
      >
      Supprimer
      </a>
      </p>
    4. Analyser les 3 routes ajoutées.
      Route::get('/users/{user}/edit', "UserController@edit")
      ->where('user', '[0-9]+');
      Route::post('/users/{user}/edit', "UserController@update")
      ->where('user', '[0-9]+');
      Route::get('/users/{user}/destroy', "UserController@destroy")
      ->where('user', '[0-9]+');
    5. Examiner les 3 méthodes correspondantes du controller UserController.
      public function edit(User $user)
      {
      return view("users.edit", ['user'=>$user]);
      }
      public function update(Request $request, User $user)
      {
      $donnees = $request->except(['password']);
      if ($request->get('password')) {
      $user->password = $request->get('password');
      }
      $user->fill($donnees);
      $user->save();
      return redirect()
      ->action('UserController@show', $user);
      }
      public function destroy(User $user)
      {
      // Temporaire : si on n'a pas fait les liaisons entre les tables
      \App\Post::where('user_id', $user->id)->delete();
      // Quand les liaisons sont faites
      // $user->posts()->delete();
      $user->delete();
      return redirect()
      ->action('UserController@index');
      }
    6. Constater la modification de la view users.create et la création de la view users.edit, dont voici le contenu :
      @extends('interface.index')
      @section('contenu')
      <h2>Modifier un usager</h2>
      @include('users.form')
      @endsection
    7. Tester!