Halloweenská akce! Na stránce s dobitím bodů zadej dole kód STRASIDELNYCH20 a získej porci +20% bodů zdarma!
Akce končí 31.10. o půlnoci.

Lekce 5 - Jednoduchý redakční systém v Symfony - Struktura projektu

PHP Symfony Základy Jednoduchý redakční systém v Symfony - Struktura projektu

ONEbit hosting Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

Vítám všechny středně pokročilé a pokročilé programátory u pokračování kurzu tutoriálů o tvorbě webových aplikací v PHP frameworku Symfony. V minulé lekci, Dokončení kalkulačky v Symfony, která byla věnována spíše začátečníkům, jsme dokončili první jednoduchou aplikaci a dnes bych se tak chtěl posunout někam dál. Začneme nový projekt, kterým bude jednoduchý redakční systém s editorem článků. To je již zajímavější webová aplikace, na které si můžeme vyzkoušet další věci, které nám Symfony nabízí (hlavně práci s ORM nad databází). Konkrétně dnešní díl bude tedy věnován především struktuře našeho projektu a jeho základnímu nastavení.

Struktura projektu

Reálné komerční projekty mají spoustu tříd a určitě bychom si v nich nevystačili pouze s rozdělením struktury projektu na modely, kontrolery a šablony. Mít v jedné složce desítky souborů je minimálně nepřehledné. Kód by se špatně spravoval a z vlastní zkušenosti mohu říci, že byste se dostali do bodu, kdy byste psali podobné metody znovu a znovu místo toho, abyste parametrizovali nějakou existující, protože byste zkrátka ani nevěděli, že v projektu nějaká podobná již je. A to je začátek konce :) Jak z toho ven?

Jmenné prostory a systém bundlů

Třídy rozdělíme do logických skupin a určitě vás nepřekvapí, že za tímto účelem využijeme jmenných prostorů. To je přesně ten nástroj určený k řešení právě problému s vysokým počtem tříd. Pokud pak např. potřebujeme sdílet určitou funkčnost mezi více projekty, můžeme ji zabalit do tzv. Symfony bundlů.

Bundly můžeme chápat jako samostatné části, ze kterých se aplikace skládá. Jak již bylo zmíněno, můžeme vytvářet vlastní nebo využít bundlů třetích stran. Těch může být i v menší aplikaci relativně velký počet a slouží jako obdoba pluginů. Mimochodem, samotný Symfony framework je implementován pomocí různých bundlů.

Pokud si pak jednou napíšeme vlastní bundle, můžeme ho později použít i v ostatních projektech, které jsou postavené na stejném systému a to aniž bychom něco složitě upravovali. V každém projektu budou zároveň jen ty bundly, které jsou zapotřebí, aby nebyl příliš složitý nebo abychom zákazníkovi prostě nedávali veškeré naše know-how :)

V tomto projektu si zatím vystačíme pouze se základní projektovou strukturou webové aplikace v Symfony. Pokud ale plánujete větší projekt, nikdy není na škodu promyslet si jeho potenciální rozdělení do bundlů předem.

Mimochodem, všimněte si, že celý náš web budeme programovat v angličtině, čeština je v programování pouze pro začátečníky a v reálných aplikacích by se objevovat neměla. Důvodem je zejména fakt, že se angličtině v kódu nevyhneme (už jen samotné PHP je anglicky a budeme používat i další třídy třetích stran) a míchat 2 jazyky do sebe je nepřehledné.

Potřebný software

Pro náš projekt budeme potřebovat klasicky webový server (např. Apache) s PHP ve verzi 7.1 nebo vyšší a MySQL databázi (případně můžete použít i jinou SQL databázi) a postavíme ho na klasické kostře webové aplikace website-skeleton pro Symfony verze 4.1.x. Pokud nevíte, jak rozchodit webový server s databází, doporučuji článek Instalace Apache, MySQL a PHP na Windows a pokud nevíte, jak vytvořit projekt v Symfony, vřele doporučuji přečíst si lekci Instalace Symfony a IDE na začátku kurzu. Nyní tedy předpokládám, že máme před sebou čerstvě nainstalovaný Symfony projekt a provedeme v něm několik následujících změn.

Příprava projektu

Za předpokladu, že jste to již neudělali, tak přímo do kořenové složky našeho projektu si přidáme soubor .htaccess, který zajistí automatické přesměrování všech požadavků do složky public/. Tento soubor může vypadat třeba takto:

<IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteRule ^$ public/ [L]
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_URI} !^public/
        RewriteRule ^(.*)$ public/$1
</IfModule>

Dále můžeme odstranit pro nás nepotřebné složky jako assets/ a tests/ dle libosti (v rámci kurzu je nebudeme potřebovat).

Přidání vlastního CSS

Na závěr si ještě přidáme vlastní CSS.

public/css/sty­le.css

Vytvoříme si ve složce public/ složku css/ a do ní umístíme soubor style.css, který bude vypadat takto:

body {
    font-family: verdana, serif;
    font-size: 14px;
    width: 900px;
    margin: 0 auto;
}

h1 {
    text-align: center;
    color: #444444;
    text-shadow: 3px 3px 3px #aaaaaa;
}

footer {
    font-size: 11px;
    text-align: center;
    padding-top: 20px;
}

article {
    text-shadow: 3px 3px 3px #aaaaaa;
}

nav ul {
    list-style-type: none;
}

nav li {
    float: left;
    margin-right: 15px;
}

nav a {
    background: #6FA4F8;
    color: white;
    padding: 5px 10px;
    border-radius: 10px;
    text-decoration: none;
    border: none;
}

nav a:hover {
    background: #2976f8;
    color: #EEEEEE;
    text-decoration: none;
}

button[type="submit"] {
    background: #6FA4F8;
    color: white;
    padding: 5px 10px;
    border-radius: 10px;
    border: 0;
}

button[type="submit"]:hover {
    background: #2976f8;
    color: #EEEEEE;
    cursor: pointer;
}

input[type="text"], input[type="email"], input[type="password"] {
    width: 250px;
    border-radius: 5px;
    border: 1px solid #aaaaaa;
    padding: 0.3em;
}

button[type="submit"] {
    padding: 10px 25px;
    display: block;
    margin: 20px auto 0;
    font-weight: bold;
}

textarea {
    border-radius: 5px;
    border: 1px solid #aaaaaa;
    width: 483px;
    height: 90px;
}

.message {
    border: 1px solid #9DC2F8;
    background: #DBE8F8;
    padding: 3px;
}

Pokud jsme vše udělali správně, měli bychom být stále schopni web spustit, vidět úvodní stránku a naše adresářová struktura by měla vypadat přibližně takto:

  • bin/ - Obsahuje spustitelné PHP skripty, především bin/console
  • config/ - Obsahuje konfiguraci projektu (např. routování, služby apod.)
  • public/ - Kořenový adresář celého webu (přístupový bod, kde všechny umístěné soubory jsou přístupné zvenčí)
    • css/ - CSS soubory
    • ...
  • src/ - Obsahuje PHP zdrojové kódy našeho projektu
    • Controller/ - Kontrolery
    • Entity/ - Entity
    • ...
  • templates/ - Složka pro šablony (standardně obsahuje další podsložky pro jednotlivé kontrolery)
  • translations/ - Složka pro potenciální soubory překladů (slouží pro jazykové mutace webu)
  • var/ - Úložiště automaticky generovaných souborů (např. logy, cache, sessions aj.)
  • vendor/ - Knihovny třetích stran poskládané pomocí nástroje Composer

Tímto dnešní lekce končí, vše jsme si hezky připravili a příště se tedy rovnou vrhneme na programování. Čeká nás Objektově Relačním Mapování nad databází ;) Těším se na vás v příští lekci, Jednoduchý redakční systém v Symfony - Model článků.


 

 

Článek pro vás napsal Jindřich Máca
Avatar
Jak se ti líbí článek?
5 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 (6)

 

 

Komentáře

Avatar
MArtin
Člen
Avatar
MArtin:3.8.2017 15:41

Paci sa mi ten celkom dobry tweak cisteho projektu. .htacces do zlozky web je bezna vec, ale tie presuvacky niektorych zloziek, je celkom dobry napad a hlavne viac to zprehladnuje projekt od zaciatku namiesto kadeakych overridov alebo postupneho presuvania suborov. Jednoducho sa to presunie hned na zaciatku. Dobry napad!

 
Odpovědět  +2 3.8.2017 15:41
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 1 zpráv z 1.