PHP'de MVC Uygulaması

Öğrendiğimiz her şeyin birlikte nasıl uygulanacağına bir göz atalım. Örneğin, web sitemizde bazı makale-sayfalar olduğunu varsayalım. Biz ya bir makaleyi göstermek ya da tüm makaleleri göstermek istiyoruz. Bunu çerçevemizde nasıl yapacağımızı inceleyelim.

Veritabanında Tablo

Başlangıç olarak veritabanında bir pages tablosu oluşturalım. id, title ve text sütunlarını ekleyelim. Bu tabloyu PhpMyAdmin aracılığıyla bazı verilerle dolduralım.

Model

Bir kayıt getirmek için bir metodu ve tüm kayıtları getirmek için bir metodu olan bir model yapalım:

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

Yönlendirme (Routing)

İlgili yönlendirmeyi yapalım:

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

Kontrolcü (Controller)

Bir kontrolcü yapalım:

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 = 'Tüm Sayfaların Listesi';
      
      $pages = (new Page) -> getAll();
      return $this->render('page/all', [
        'pages' => $pages,
        'h1' => $this->title
      ]);
    }
  }
?>

Görünümler (Views)

one metodu için bir görünüm yapalım:

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

all metodu için bir görünüm yapalım:

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

Pratik Görevler

Задание 1

Veritabanınızda ürünler olduğunu varsayalım. Her bir ürün bir isim, fiyat, miktar ve açıklama içerir. Teoride yapıldığı gibi, id'ye göre tek bir ürünün ve tüm ürünlerin listelenmesini gerçekleştirin.