Tillämpning av MVC i PHP

Låt oss titta på tillämpningen av allt vi har lärt oss. Låt oss säga att vi till exempel på webbplatsen har några artiklar/sidor. Vi vill antingen visa en artikel eller visa alla artiklar. Låt oss överväga hur man gör detta i vår ramverk.

Tabell i databasen

Låt oss först skapa tabellen pages i databasen. Låt oss lägga till kolumnerna id, title och text. Låt oss fylla denna tabell med några data via PhpMyAdmin.

Modell

Låt oss skapa en modell med en metod för att hämta en post och en metod för att hämta alla poster:

/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");
    }
  }
?>

Routning

Låt oss skapa motsvarande routing:

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

Kontroller

Låt oss skapa en kontroller:

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 = 'Lista över alla sidor';
      
      $pages = (new Page) -> getAll();
      return $this->render('page/all', [
        'pages' => $pages,
        'h1' => $this->title
      ]);
    }
  }
?>

Vyer

Låt oss skapa en vy för metoden one:

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

Låt oss skapa en vy för metoden all:

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

Praktiska uppgifter

Задание 1

Anta att du har produkter i din databas. Varje produkt innehåller namn, pris och kvantitet, beskrivning. Implementera visning av en produkt efter id och alla produkter liknande som gjorts i teorin.