IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 7 - Jednoduchý redakční systém v Symfony - Výpis článku

V minulé lekci, Jednoduchý redakční systém v Symfony - Model článků, jsme si připravili modelovou vrstvu, konkrétně repozitář pro práci s články.

Jak jsem slíbil, dnes k redakčnímu systému přidáme i kontroler a šablony, čímž zprovozníme výpis článků.

Konfigurace

Začneme ale tím, že lehce nahlédneme do konfigurace Symfony frameworku a zkusíme si zde přidat vlastní parametr.

config/services.yaml

Náš parametr bude reprezentovat URL adresu článku pro úvodní stránku našeho redakčního systému. Parametry dále předávané do aplikace se standardně nastavují v souboru services.yaml a tak ho sem přidáme i my:

...
# Put parameters here that don't need to change on each machine where the app is deployed
# https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration
parameters:
    locale: 'en'
    default_article_url: 'uvod' # URL výchozího článku
...

To je vše, ale můžete se zde také podívat, jak je obecně řešená konfigurace služeb v Symfony, dále předávaných pomocí DI.

Kontroler

Budeme pokračovat již slíbeným kontrolerem pro správu článku.

src/Controller/ArticleController.php

Kostru pro kontroler si opět můžeme nechat automaticky vytvořit pomocí Symfony příkazu:

php bin/console make:controller ArticleController

Ten bude po úpravě vypadat následovně:

<?php

namespace App\Controller;

use App\Entity\Article;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Entity;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Annotation\Route;

/**
 * Kontroler pro vykreslování článků.
 * @package App\Controller
 */
class ArticleController extends AbstractController
{
    /**
     * Načte článek podle jeho URL a předá jej do šablony.
     * Pokud není zadaná URL, nastaví se jí hodnota pro výchozí článek.
     * @param Article $article článek
     * @return Response HTTP odpověď
     * @throws NotFoundHttpException Jestliže článek s danou URL nebyl nalezen.
     * @Route("/{url?%default_article_url%}", name="article")
     * @Entity("article", expr="repository.findOneByUrl(url)")
     */
    public function index(Article $article): Response
    {
        return $this->render('article/index.html.twig', ['article' => $article]);
    }
}

Zde asi upozorním hned na několik věcí:

  • Zápis routování získávající URL daného článku a také způsob získání výchozího článku z konfigurace, pokud není URL adresa zadána uživatelem (anotace @Route)
  • Mapování této URL na entitu článku pomocí repositáře, přičemž ta je následně předána jako parametr metody (anotace @Entity)
  • Automatické vyvolání výjimky (Symfony třída NotFoundHttpException) pokud článek s danou URL neexistuje

Šablony

Nyní je tedy čas podívat se na zoubek šablonám.

templates/base.html.twig

Samozřejmě nezačneme ničím jiným, než úpravou celkového vzhledu naší aplikace, který v tomto případě zajišťuje výchozí Twig šablona base.html.twig v adresáři templates/:

<!DOCTYPE html>
<html lang="cs-cz">
    <head>
        <meta charset="UTF-8"/>
        <title>{% apply striptags %}{% block title %}{% endblock %}{% endapply %}</title>
        <meta name="description" content="{% apply striptags %}{% block description %}{% endblock %}{% endapply %}"/>

        {% block stylesheets %}
            <link type="text/css" rel="stylesheet" href="{{ asset('css/style.css') }}">
        {% endblock %}
    </head>
    <body>
        <header>
            <h1>Jednoduchý redakční systém v Symfony</h1>
        </header>

        {# Výpis zpráv. #}
        {% for type, flash_messages in app.session.flashBag.all %}
            {% for flash_message in flash_messages %}
                <div class="message">{{ flash_message }}</div>
            {% endfor %}
        {% endfor %}

        <nav>
            <ul>
                <li><a href="{{ path('article') }}">Úvod</a></li>
                <li><a href="#">Seznam článků</a></li>
                <li><a href="#">Kontakt</a></li>
            </ul>
        </nav>

        <div style="clear: both"></div>

        <article>
            <header>
                <h1>{{ block('title') }}</h1>
            </header>
            <section>
                {% block body %}{% endblock %} {# Vložení obsahu do šablony. #}
            </section>
        </article>

        <footer>
            <p>
                Ukázkový tutoriál pro jednoduchý redakční systém v Symfony z programátorské sociální sítě
                <a href="http://www.itnetwork.cz" target="_blank">itnetwork.cz</a>
            </p>
        </footer>

        {% block javascripts %}{% endblock %}
    </body>
</html>

templates/article/index.html.twig

Dále poupravíme dříve vygenerovanou šablonu i pro samotný výpis článku, která bude mít následující podobu:

{% extends 'base.html.twig' %}

{% block title %}{{ article.title }}{% endblock %}
{% block description %}{{ article.description }}{% endblock %}
{% block body %}{{ article.content|raw }}{% endblock %}

Nyní si můžeme zkusit web spustit a podívat se na úvodní stránku. Je to jistě příjemný pocit po tom, co jsme změnili tolik kódu, že? :)

Úvodní stránka redakčního systému v Symfony frameworku - Základy frameworku Symfony pro PHP

Úplný základ máme zprovozněný.

Příště, v lekci Jednoduchý redakční systém v Symfony - Administrace, se podíváme na administraci článků ;)


 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 132x (10.66 MB)
Aplikace je včetně zdrojových kódů v jazyce PHP

 

Předchozí článek
Jednoduchý redakční systém v Symfony - Model článků
Všechny články v sekci
Základy frameworku Symfony pro PHP
Přeskočit článek
(nedoporučujeme)
Jednoduchý redakční systém v Symfony - Administrace
Článek pro vás napsal Jindřich Máca
Avatar
Uživatelské hodnocení:
24 hlasů
Autor se věnuje převážně webovým technologiím, ale má velkou zálibu ve všem vědeckém, nejen ze světa IT. :-)
Aktivity