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?

Ú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 137x (10.66 MB)
Aplikace je včetně zdrojových kódů v jazyce PHP