Zarábaj až 6 000 € mesačne! Akreditované rekvalifikačné kurzy od 0 €. Viac informácií.

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 / ArticleContro­ller.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? :)

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

Ú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

 

Predchádzajúci článok
Jednoduchý redakčný systém v Symfony - Model článkov
Všetky články v sekcii
Základy frameworku Symfony pre PHP
Preskočiť článok
(neodporúčame)
Jednoduchý redakčný systém v Symfony - Administrácia
Článok pre vás napísal Jindřich Máca
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
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