Application du MVC en PHP

Voyons l'application conjointe de tout ce qui a été étudié. Supposons, par exemple, que nous ayons sur le site des articles-pages. Nous voulons soit afficher un article, soit afficher tous les articles. Voyons comment le faire dans notre framework.

Table en base de données

Pour commencer, créons une table pages dans la base de données. Ajoutons-y les colonnes id, title et text. Remplissons cette table avec quelques données via PhpMyAdmin.

Modèle

Créons un modèle avec une méthode pour obtenir un enregistrement et une méthode pour obtenir tous les enregistrements :

/project/models/Page.php<?php
  namespace Project\Models;
  use \Core\Model;
  
  class Page extends Model
  {
    public function getById($id)
    {
      return $this->findOne("SELECT * FROM pages WHERE id=$id");
    }
    
    public function getAll()
    {
      return $this->findMany("SELECT id, title FROM pages");
    }
  }
?>

Routage

Configurons le routage correspondant :

/project/config/routes.php<?php
  use \Core\Route;
  
  return [
    new Route('/page/:id', 'page', 'one'),
    new Route('/pages/',   'page', 'all'),
  ];
?>

Contrôleur

Créons le contrôleur :

project/controllers/PageController.php<?php
  namespace Project\Controllers;
  use \Core\Controller;
  use \Project\Models\Page;
  
  class PageController extends Controller
  {
    public function one($params)
    {
      $page = (new Page) -> getById($params['id']);
      
      $this->title = $page['title'];
      return $this->render('page/one', [
        'text' => $page['text'],
        'h1' => $this->title
      ]);
    }
    
    public function all()
    {
      $this->title = 'Liste de toutes les pages';
      
      $pages = (new Page) -> getAll();
      return $this->render('page/all', [
        'pages' => $pages,
        'h1' => $this->title
      ]);
    }
  }
?>

Vues

Créons la vue pour la méthode one :

/project/views/page/one.php<h1><?= $h1; ?></h1>
<div id="content">
  <?= $text; ?>
</div>

Créons la vue pour la méthode all :

/project/views/page/all.php<h1><?= $h1; ?></h1>
<div id="content">
  <table>
    <tr>
      <th>id</th>
      <th>title</th>
      <th>lien</th>
    </tr>
    <?php foreach ($pages as $page): ?>
    <tr>
      <td><?= $page['id']; ?></td>
      <td><?= $page['title']; ?></td>
      <td><a href="/page/<?= $page['id']; ?>/">lien vers la page</td>
    </tr>
    <?php endforeach; ?>
  </table>
</div>

Tâches pratiques

Задание 1

Supposons que vous ayez des produits dans votre base de données. Chaque produit contient un nom, un prix, une quantité et une description. Implémentez l'affichage d'un produit par id et de tous les produits de manière similaire à ce qui est fait dans la théorie.