Итак, я пытаюсь освоить MVC. Вроде настроил файл бутстрапа, получаю только те страницы, одноимённые классы которых существуют. С экшенами то же самое: существует -- подключаем, нет -- показываем ошибку.
Смог разобраться, как получать данные из модели, передавать их контроллеру, а оттуда -- в вид. На данный момент у меня есть следующее:
Model.php
abstract class Model
{
public $connect;
public function __construct()
{
return $this->connect = new PDO('mysql:host=localhost;dbname=app', 'root', '');
}
abstract function getAllEntities();
abstract function getEntityById();
}
View.php
class View
{
public function render($header, $content, $footer, $data = null)
{
include 'app/views/'.$header;
include 'app/views/'.$content;
include 'app/views/'.$footer;
}
}
Controller.php
abstract class Controller
{
public $view;
public function __construct()
{
$this->view = new View();
}
}
PostsModel.php
class PostsModel extends Model
{
public function getAllEntities()
{
$stmt = $this->connect->query('SELECT * FROM articles');
return $stmt->fetchAll(PDO::FETCH_OBJ);
}
public function getEntityById()
{
// Получаю статью по ссылке geo.test/posts/post, а хочу -- geo.test/posts/1
$stmt = $this->connect->query('SELECT * FROM articles WHERE id = 1');
return $stmt->fetchAll(PDO::FETCH_OBJ);
}
}
PostsController.php
class PostsController extends Controller
{
public function __construct()
{
$this->model = new PostsModel();
$this->view = new View();
}
public function indexAction()
{
$data = $this->model->getAllEntities();
$this->view->render('layouts/header.php', 'posts.php', 'layouts/footer.php', $data);
}
public function postAction()
{
$data = $this->model->getEntityById();
$this->view->render('layouts/header.php','post.php', 'layouts/footer.php', $data);
}
}
ну и шаблон, куда передаю данные:
<?php foreach ($data as $post): ?>
<h1 class="page-header"><a href="posts/<?= $post->id ?>"><?= $post->title ?></a></h1>
<?php endforeach; ?>
Как видно, пытаюсь, как встарь, передавать id по ссылке (однако думаю, что это неправильный вариант).
Теперь не могу разобраться, как получить всю информацию только по одной статье.