@neliudov
Имярек

Как получить конкретный ID какой-то сущности и передать его в вид?

Итак, я пытаюсь освоить 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 по ссылке (однако думаю, что это неправильный вариант).

Теперь не могу разобраться, как получить всю информацию только по одной статье.
  • Вопрос задан
  • 130 просмотров
Решения вопроса 1
DevMan
@DevMan
это как раз правильный вариант.
другой вопрос, что вместо айди может быть использован тайтл или оба вместе.

кстати, мвц тут вообще не при делах.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы