MVC rakendamine PHP-s

Vaatame kõigi õpitud asjade kooskasutamist. Oletame näiteks, et meie veebisaidil on mõned artiklid-leheküljed. Me tahame kas näidata ühte artiklit või näidata kõiki artikleid. Vaatame, kuidas seda teha meie raamistikus.

Tabel andmebaasis

Alustuseks loome tabeli pages andmebaasi. Lisame sinna veerud id, title ja text. Täidame selle tabeli mõne andmega läbi PhpMyAdmini.

Mudel

Teeme mudeli, millel on meetod ühe kirje saamiseks ja meetod kõigi kirjete saamiseks:

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

Marsruutimine

Teeme vastava marsruutimise:

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

Kontroller

Teeme kontrolleri:

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 = 'Kõikide lehtede nimekiri';
      
      $pages = (new Page) -> getAll();
      return $this->render('page/all', [
        'pages' => $pages,
        'h1' => $this->title
      ]);
    }
  }
?>

Vaated

Teeme vaate meetodile one:

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

Teeme vaate meetodile all:

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

Praktilised ülesanded

Задание 1

Oletame, et teie andmebaasis on tooted. Iga toode sisaldab nimetust, hinda ja kogust, kirjeldust. Rakendage ühe toode kuvamine id järgi ja kõikide toodete kuvamine sarnaselt teoorias tehtule.