MVC alkalmazása PHP-ban

Nézzük meg a tanultak együttes alkalmazását. Tegyük fel például, hogy a weboldalunkon vannak cikkek-oldalak. Vagy egy cikket akarunk megjeleníteni, vagy az összes cikket. Vizsgáljuk meg, hogyan tehetjük ezt meg a keretrendszerünkben.

Tábla az adatbázisban

Kezdetként hozzunk létre egy pages táblát az adatbázisban. Adjunk hozzá id, title és text oszlopokat. Töltsük ki ezt a táblát néhány adattal a PhpMyAdmin-on keresztül.

Modell

Készítsünk egy modellt egy rekord lekérésére és egy metódussal az összes rekord lekérésére:

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

Útválasztás

Készítsük el a megfelelő útválasztást:

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

Vezérlő

Készítsük el a vezérlőt:

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 = 'Az összes oldal listája';
      
      $pages = (new Page) -> getAll();
      return $this->render('page/all', [
        'pages' => $pages,
        'h1' => $this->title
      ]);
    }
  }
?>

Nézetek

Készítsük el a nézetet a one metódushoz:

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

Készítsük el a nézetet a all metódushoz:

/project/views/page/all.php<h1><?= $h1; ?></h1>
<div id="content">
  <table>
    <tr>
      <th>id</th>
      <th>cím</th>
      <th>hivatkozás</th>
    </tr>
    <?php foreach ($pages as $page): ?>
    <tr>
      <td><?= $page['id']; ?></td>
      <td><?= $page['title']; ?></td>
      <td><a href="/page/<?= $page['id']; ?>/">hivatkozás az oldalra</td>
    </tr>
    <?php endforeach; ?>
  </table>
</div>

Gyakorlati feladatok

Задание 1

Tegyük fel, hogy vannak termékei az adatbázisában. Minden termék tartalmaz nevet, árat és mennyiséget, leírást. Valósítsa meg egy termék megjelenítését id alapján és az összes terméket hasonlóan ahogy az elméletben is meg van csinálva.