PHP에서 MVC 적용하기
배운 내용들을 함께 적용하는 방법을 살펴보겠습니다. 예를 들어, 웹사이트에 일부 문서 페이지가 있다고 가정해 보겠습니다. 우리는 하나의 문서를 보여주거나 모든 문서를 보여주고 싶습니다. 우리의 프레임워크에서 이를 어떻게 구현하는지 살펴보겠습니다.
데이터베이스 테이블
먼저 데이터베이스에 pages 테이블을 생성하겠습니다.
id, title 및 text 컬럼을 추가합니다.
PhpMyAdmin을 통해 이 테이블에 임의의 데이터를 채워 넣습니다.
모델
단일 레코드를 가져오는 메서드와 모든 레코드를 가져오는 메서드가 있는 모델을 만듭니다:
<?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");
}
}
?>
라우팅
해당 라우팅을 설정합니다:
<?php
use \Core\Route;
return [
new Route('/page/:id', 'page', 'one'),
new Route('/pages/', 'page', 'all'),
];
?>
컨트롤러
컨트롤러를 만듭니다:
<?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 = '모든 페이지 목록';
$pages = (new Page) -> getAll();
return $this->render('page/all', [
'pages' => $pages,
'h1' => $this->title
]);
}
}
?>
뷰
one 메서드에 대한 뷰를 만듭니다:
<h1><?= $h1; ?></h1>
<div id="content">
<?= $text; ?>
</div>
all 메서드에 대한 뷰를 만듭니다:
<h1><?= $h1; ?></h1>
<div id="content">
<table>
<tr>
<th>id</th>
<th>title</th>
<th>링크</th>
</tr>
<?php foreach ($pages as $page): ?>
<tr>
<td><?= $page['id']; ?></td>
<td><?= $page['title']; ?></td>
<td><a href="/page/<?= $page['id']; ?>/">페이지 링크</td>
</tr>
<?php endforeach; ?>
</table>
</div>
실습 과제
데이터베이스에 상품이 있다고 가정합니다.
각 상품에는 이름, 가격, 수량, 설명이 포함되어 있습니다.
이론에서 한 것과 유사하게 id로 하나의 상품과 모든 상품을 표시하는 기능을 구현하세요.