PHPda MVCni qo‘llash

Keling, o‘rganilgan barcha narsalarni birgalikda qo‘llashni ko‘rib chiqaylik. Faraz qilaylik, masalan, bizning saytimizda maqola-sahifalar mavjud. Biz bitta maqolani ko‘rsatmoqchimiz yoki barcha maqolalarni ko‘rsatmoqchimiz. Keling, buni bizning freymvorkimizda qanday amalga oshirishni ko‘rib chiqaylik.

Ma’lumotlar bazasidagi jadval

Boshlash uchun ma’lumotlar bazasida pages jadvalini yaratamiz. Unga id, title va text ustunlarini qo‘shamiz. Keling, bu jadvalni ba’zi ma’lumotlar bilan PhpMyAdmin orqali to‘ldiramiz.

Model

Bitta yozuvni olish va barcha yozuvlarni olish usullari bilan model yaratamiz:

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

Marshrutlash

Keling, mos marshrutlashni amalga oshiramiz:

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

Controller

Keling, controller yaratamiz:

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 = 'Barcha sahifalar ro‘yxati';
      
      $pages = (new Page) -> getAll();
      return $this->render('page/all', [
        'pages' => $pages,
        'h1' => $this->title
      ]);
    }
  }
?>

Ko‘rinishlar

one usuli uchun ko‘rinish yaratamiz:

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

all usuli uchun ko‘rinish yaratamiz:

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

Amaliy vazifalar

Задание 1

Faraz qilaylik, ma’lumotlar bazangizda mahsulotlar mavjud. Har bir mahsulot nom, narx va miqdor, tavsifni o‘z ichiga oladi. id bo‘yicha bitta mahsulotni va barcha mahsulotlarni chiqarishni nazariyada qilinganidek amalga oshiring.