Пишем Блог на PHP. Часть 6: Выводим список постов с базы данных

27 Декабря 2020

В этом уроке, мы выведем список постов с базы данных на главную страницу. Мы научимся с вами, как работать с коллекцией данных, которая будет загружена из хранилища базы данных MySQL.

Для этого, мы используем главную страницу и выведем все посты, которые у нас сохранены в базе данных. Стоит заметить, что мы используем существующий класс PostMapper для рассширения возможности работы с таблицей post. И добавим новый метод в класс PostMapper::getList().

Метод getList будет отвечать за выгрузку всех данных с таблицы post. Также, мы позаботимся о том, что б наши выгруженные посты показывались в правильном порядке. А именно исходя из даты добавления поста. Мы воспользуемся встроенной возможностью MySQL и добавим сортировку по полю published_date.

Какие темы мы разберем

В Пишем Блог на PHP. Часть 6: Выводим список постов с базы данных уроке мы рассмотрим следующие темы:

  • Как загружать все посты и выводить на главную страницу
  • Напишем запрос для возвращения постов с сортировкой по дате
  • Разберем, как выводить по три поста в ряду с использованием переменных Twig

Приятного просмотра:

В рамках урока, мы напишем следующий код.

Функция по обработке и отрисовке главной страницы:

// index.php

$app->get(
    '/', 
    function (Request $request, Response $response, $args) 
        use ($view, $postMapper) 
    {
        $posts = $postMapper->getList('DESC');
    
        $body = $view->render('index.twig', [
            'posts' => $posts
        ]);
        $response->getBody()->write($body);
        return $response;
    }
);

Шаблон index.twig главной страницы:

{% extends 'base.twig' %}

{% block body %}
<div class="container">
  <h1 class="mb-3 mt-3">Welcome to my Blog!</h1>
  {% set rowCount = 1 %}
  {% for post in posts %}
    {% if rowCount == 1 %}
      <div class="container row">
    {% endif %}
      <div class="p-1">
        <div class="card" style="width: 18rem;">
          <img src="https://dummyimage.com/300x200/5b76ba/ffffff" class="card-img-top" alt="{{ post.title|escape }}">
          <div class="card-body">
            <a href="/{{ post.url_key }}"><h5 class="card-title">{{ post.title|escape }}</h5></a>
            <p class="card-text">{{ post.description|escape }}</p>
            <a href="/{{ post.url_key }}" class="">Read more</a>
          </div>
        </div>
      </div>
    {% set rowCount = rowCount + 1 %}
    {% if rowCount == 1 %}
      </div>
    {% endif %}
    {% if rowCount > 3 %}
      {% set rowCount = 1 %}
    {% endif %}
  {% endfor %}
</div>
{% endblock %}

Метод getList() класса PostMapper:

public function getList(string $direction): ?array
{
    if (!in_array($direction, ['DESC', 'ASC'])) {
        throw new Exception('The direction is not supported.');
    }
    $statement = $this->connection
        ->prepare(
            'SELECT * FROM post ORDER BY published_date ' 
            . $direction
        );

    $statement->execute();

    return $statement->fetchAll();
}

Скачать код данного урока можно по ссылке.


Автор Макс Пронько живет в Дублине и пишет о Веб разработке. Видео-уроки на моем YouTube канале. Телеграм для своих ребят.

© 2020 Макс Пронько. Все права защищены. Я использую Gatsby и Netlify