PHP-də MVC-nin Tətbiqi

Gəlin öyrənilənlərin hamısının birgə tətbiqinə baxaq. Məsələn, tutaq ki, saytımızda bəzi məqalə-səhifələr var. Biz ya bir məqaləni göstərmək, ya da bütün məqalələri göstərmək istəyirik. Gəlin bunu frameworkumuzda necə edə biləcəyimizə baxaq.

Verilənlər Bazasında Cədvəl

Əvvəlcə verilənlər bazasında pages cədvəlini yaradaq. Oraya id, title və text sütunlarını əlavə edək. Bu cədvəli PhpMyAdmin vasitəsilə bəzi məlumatlarla dolduraq.

Model

Bir yazını almaq üçün bir metod və bütün yazıları almaq üçün bir metod olan bir model edək:

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

Routing

Uyğun routingi edək:

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

Controller

Controller edək:

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 = 'Butun səhifələrin siyahısı';
      
      $pages = (new Page) -> getAll();
      return $this->render('page/all', [
        'pages' => $pages,
        'h1' => $this->title
      ]);
    }
  }
?>

View-lar

one metodu üçün view edək:

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

all metodu üçün view edək:

/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']; ?>/">səhifəyə link</td>
    </tr>
    <?php endforeach; ?>
  </table>
</div>

Praktik Tapşırıqlar

Задание 1

Tutaq ki, verilənlər bazanızda məhsullar var. Hər bir məhsul ad, qiymət və miqdar, təsviri ehtiva edir. Bir məhsulun id-yə görə və bütün məhsulların çıxarılmasını nəzərdə keçirdiyimiz kimi həyata keçirin.