Un site Web avec Laravel

Les étapes

  1. La base de données

    1. Dans le dossier /database, créer une fichier vide nommé blog.sqlite
    2. Mettre le chemin de ce fichier dans le presse-papier en cliquant avec le bouton de droite sur son nom et "Copy path".
    3. Ouvrir le fichier /.env afin de voir la configuration par défaut d'une connexion MySQL. S'il n'y a pas de fichier .env, renommer le fichier .env.exemple
    4. Adapter les lignes suivantes :
      DB_CONNECTION=sqlite
      // et
      DB_DATABASE="C:/.../database/blog.sqlite"

      Ne pas oublier de mettre les guillemets et d'adapter les barres obliques.

    5. Créer la route qui réinitialisera la base de données : Route::get('/installer', 'AppController@installer');
    6. Créer le controller correspondant : php artisan make:controller AppController
    7. Ouvrir le controller AppController et ajouter la méthode (non statique) installer

      public function installer () {
      $db = \DB::connection()->getDatabaseName();
      file_put_contents($db, '');
      // \Artisan::call("migrate");
      // \Artisan::call("db:seed");
      return "La base de donnée a été réinitialisée";
      }
    8. Tester et constater la création d'un fichier vide /database/database.sqlite
    9. Ouvrir la base de données dans SQLite Browser.
  2. Les migrations

    1. Dans le terminal, lancer la migration php artisan migrate
    2. Tester les commandes php artisan migrate:rollback et php artisan migrate:reset.
    3. Analyser l'effet de ces commandes sur les tables dans SQLite Browser.
    4. Décommenter ou ajouter la migration dans AppController et tester.

      \Artisan::call("migrate");
  3. La migration des users

    1. Ouvrir le fichier de migration des users qui se trouve dans le dossier /database/migrations/
    2. Ajouter la création des champs supplémentaires du modèle : "prenom", "nom", "tel", "adresse", "ville", "province", "codepostal" et "citation"
      $table->increments('id');
      $table->string('name');
      $table->string('email')->unique();
      $table->string('password');
      $table->string("prenom");
      $table->string("nom");
      $table->string("tel");
      $table->string("adresse");
      $table->string("ville");
      $table->string("province");
      $table->string("codepostal");
      $table->text("citation");
      $table->rememberToken();
      $table->timestamps();
    3. Voir le cheatsheet sur les Schema pour le types de données.
  4. La migration des posts

    1. Ouvrir le fichier de migration des posts qui se trouve dans le dossier /database/migrations/
    2. Ajouter les champs de la migration des posts.
      $table->increments('id');
      $table->integer("user_id");
      $table->string("titre");
      $table->text("contenu");
      $table->timestamps();
    3. Ajouter la contrainte pour la clé étrangère.
      $table->integer("user_id");
      $table->foreign("user_id")->on("users")->references("id");
    4. Tester : réinstallation la base de données.
  5. Le seeder

    1. Décommenter ou ajouter le seeder dans AppController et tester.

      \Artisan::call("db:seed");
    2. Ouvrir le fichier /database/seeders/DatabaseSeeder.php
    3. Dans la méthode run créer un user bidon et le sauvegarder.
      $user = User::fake();
      $user->save();
    4. En haut du fichier, ajouter l'instruction use pour les modèles User et Post.
      use App\User;
      use App\Post;
    5. Tester et constater l'erreur d'intégrité.
    6. Ouvrir le fichier du model User.
    7. Ajouter les valeurs pour les données name et password.
      $resultat->nom = $f->lastName();
      $resultat->name = \Str::slug($resultat->prenom.$resultat->nom, '');
      $resultat->password = \Str::slug($resultat->prenom.$resultat->nom, '');
      $resultat->email = $resultat->name.'@'.$f->domain();
    8. Ajouter une boucle pour créer plusieurs users.
    9. Tester et regarder le résultat dans SQLite Browser.
  6. Ajout de posts aux users

    1. Copier la méthode fake dans le model Post et l'adapter avec les données titre et contenu.

    2. Ajouter le paramètre $user_id et la donnée correspondante de l'objet.
      static public function fake($user_id) {
      $f = \Faker\Factory::create("fr_CA");
      $resultat = new self();
      $resultat->user_id = $user_id;
      $resultat->titre = $f->text();
      $resultat->contenu = $f->paragraph();
      return $resultat;
      }
    3. Dans la boucle des users, ajouter une autre boucle qui crée plusieurs posts associés au user.
      for ($i = 0; $i < 10; $i += 1) {
      $user = User::fake();
      $user->save();
      for ($j = 0; $j < 10; $j += 1) {
      $post = Post::fake($user->id);
      $post->save();
      }
      }
    4. Ajuster la boucle des posts pour avoir un nombre d'itérations aléatoire.
      $nb = rand(0, 10);
      for ($j = 0; $j < $nb; $j += 1) {
    5. Tester et regarder le résultat dans SQLite Browser.
  7. L'affichage des données

    1. Dans l'action Usercontroller@index, remplacer la boucle par l'appel au model.
      $users = [];
      for ($i = 0; $i < 10; $i += 1) {
      $users[] = User::fake();
      }
      $users = User::all();
    2. Visionner la page d'accueil. Dire WOW!
    3. Faire trier la requête : $users = User::orderBy('nom')->get();
    4. Voir le cheatsheet sur les Model pour les commandes possibles.
  8. Le paramètre d'adresse

    1. Tester l'adresse http://localhost:8000/users/1
    2. Ajouter la route équivalente actionnant l'action UserController@show
    3. Remplacer le 1 par le paramètre d'adresse {id}
    4. Dans l'action Usercontroller@show, récupérer le user dont le id est 1 : $user = User::find(1);
    5. Faire retourner la valeur du paramètre $id à l'affichage : return $id;
    6. Remplacer le 1 par le paramètre de la méthode $id
    7. Tester et constater l'affichage du 1 puis changer la valeur. On peut même mettre un mot et il s'affichera.
    8. Remettre l'adresse originale.
    9. Dans l'action Usercontroller@show, récupérer le user dont le id correspound au paramètre $id : $user = User::find($id);
    10. Faire retourner le $user à l'affichage : return $user;
    11. Tester et constater l'affichage du JSON du user. Tester l'adresse avec d'autres entiers.
    12. On pourrait laisser ainsi, mais on ajoute une autre fonctionnalité Laravel...
    13. Dans la route, changer le id pour user.
    14. Dans le controller, changer la déclaration du paramètre pour public function show(User $user) {
    15. Mettre en commentaire (ou supprimer) l'instruction avec find.
    16. Tester... Ça fonctionne!
  9. La view show

    1. Dans l'action Usercontroller@show, faire retourner le $user à l'affichage en utilisant la view users.show : return view('users.show', ['user'=>$user]);.
    2. Créer la view users.show et y mettre le contenu de la view users.index.
    3. Supprimer la boucle.
    4. Tester et constater la disparition de l'interface...
  10. Les adresses dans les view

    1. Ouvrir la view de la page maîtresse (interface.index).users.show et remplacer l'URL vers la feuille de style par la commande asset : {{asset('style.css')}}.
    2. Tester. L'interface devrait être partiellement revenue.
    3. Répéter pour toutes les adresses qui mènent vers un fichier du dossier public : .css, .js, les images...
    4. Voir le cheatsheet sur les URL pour les autres commandes possibles.
  11. Les adresses vers des actions

    1. Ouvrir la view interface.menu.
    2. Repérer le lien qui pointe vers la page d'accueil et remplacer index.html par /
    3. Changer le texte du prochain lien pour Liste des usagers et son href pour {{action('UserController@index')}}.
    4. Tester et regarder les adresses résultantes des 2 liens.
  12. Le lien vers la page de détails

    1. Dupliquer la route / et faire pointer la deuxième vers /users. Regarder les adresses résultantes.
    2. Dans la view users.index ajouter un lien au titre avec le href {{action('UserController@show')}}. Tester et constater l'adresse l'erreur.
    3. Tester les adresses suivantes et regarder les adresses résultantes
      {{action('UserController@show', ['id'=>$user->id])}}
      {{action('UserController@show', ['id'=>$user->id, age=>99])}}
      {{action('UserController@show', [$user->id])}}
      {{action('UserController@show', [$user])}}
      {{action('UserController@show', $user)}}