7. diel - Jednoduchý redakčný systém v Symfony - Výpis článku
Vítam vás všetkých u pokračovanie online kurze tutoriálov o tvorbe webových aplikácií v PHP frameworku Symfony. V minulej lekcii, Jednoduchý redakčný systém v Symfony - Model článkov , sme si pripravili modelovú vrstvu, konkrétne repozitár pre prácu s článkami. Ako som sľúbil, dnes k nemu pridáme aj kontrolér a šablóny, čím v našom redakčnom systéme sprevádzkujeme výpis článkov.
Konfigurácia
Začneme ale tým, že ľahko nahliadneme do konfigurácie Symfony frameworku a skúsime si tu pridať vlastný parameter.
Config / services.yaml
Náš parameter bude reprezentovať URL adresu článku pre úvodnú stránku
nášho redakčného systému. Parametre ďalej odovzdávané do aplikácie sa
štandardne nastavujú v súbore services.yaml
a tak ho sem
pridáme aj 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. ...
Za nás je to všetko, ale môžete sa tu tiež pozrieť, ako je všeobecne riešená konfigurácia služieb v Symfony, ďalej odovzdávaných pomocou DI.
Kontrolér
Budeme pokračovať už sľúbené kontrolerom pre správu článku.
Src / Controller / ArticleController.php
Ten bude vyzerať nasledovne:
<?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]); } }
Kostru pre kontrolér si opäť môžete nechať automaticky
vytvoriť pomocou Symfony príkazu
php bin/console make:controller ArticleController
Tu asi upozorním hneď na niekoľko vecí:
- Zápis routovanie získavajúce URL daného článku a tiež spôsob
získania počiatočného článku z konfigurácie, pokiaľ nie je URL adresa
zadaná užívateľom (anotácie
@Route
) - Mapovanie tejto URL na entitu článku pomocou repozitára, pričom tá je
následne odovzdaná ako parameter metódy (anotácie
@Entity
) - Automatické vyvolanie výnimky (Symfony trieda
NotFoundHttpException
) pokiaľ článok s danou URL neexistuje
Šablóny
Teraz je teda čas pozrieť sa na zúbok šablónam.
Templates / base.html.twig
Samozrejme nezačneme ničím iným ako úpravou celkového vzhľadu našej
aplikácie, ktorý v tomto prípade zaisťuje východiskový Twig šablóna
base.html.twig
:
<!DOCTYPE html> <html lang="cs-cz"> <head> <meta charset="UTF-8"/> <title>{% filter striptags %}{% block title %}{% endblock %}{% endfilter %}</title> <meta name="description" content="{% filter striptags %}{% block description %}{% endblock %}{% endfilter %}"/> {% 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> <br clear="both"/> <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
Ďalej dodáme šablónu aj pre samotný výpis článku, ktorá bude mať nasledujúce podobu:
{% extends 'base.html.twig' %} {% block title %}{{ article.title }}{% endblock %} {% block description %}{{ article.description }}{% endblock %} {% block body %}{{ article.content|raw }}{% endblock %}
Ak ste si nechali automaticky vygenerovať kontrolér, máte pripravenú už aj kostru tejto šablóny.
Teraz si môžete skúsiť web spustiť a pozrieť sa na úvodnú stránku. Je to určite príjemný pocit po tom, čo sme zmenili toľko kódu, že?
Úplný základ máme sprevádzkovaný. Nabudúce v lekcii Jednoduchý redakčný systém v Symfony - Administrácia pôjdeme o zase niečo hlbšie pozrieme sa na administráciu článkov
Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 136x (10.66 MB)
Aplikácia je vrátane zdrojových kódov v jazyku PHP