5. diel - Jednoduchý redakčný systém v Symfony - Štruktúra projektu
Vítam všetky stredne pokročilých a pokročilých programátorov u pokračovanie kurzu tutoriálov o tvorbe webových aplikácií v PHP frameworku Symfony. V minulej lekcii, Dokončenie kalkulačky v Symfony , ktorá bola venovaná skôr začiatočníkom, sme dokončili prvú jednoduchú aplikáciu a dnes by som sa tak chcel posunúť niekam ďalej. Začneme nový projekt, ktorým bude jednoduchý redakčný systém s editorom článkov. To je už zaujímavejšie webová aplikácia, na ktoré si môžeme vyskúšať ďalšie veci, ktoré nám Symfony ponúka (hlavne prácu s ORM nad databázou). Konkrétne dnešný diel bude teda venovaný predovšetkým štruktúre nášho projektu a jeho základnému nastaveniu.
Štruktúra projektu
Reálne komerčné projekty majú veľa tried a určite by sme si v nich nevystačili len s rozdelením štruktúry projektu na modely, kontrolery a šablóny. Mať v jednej zložke desiatky súborov je minimálne neprehľadné. Kód by sa zle spravoval az vlastnej skúsenosti môžem povedať, že by ste sa dostali do bodu, kedy by ste písali podobné metódy znovu a znovu namiesto toho, aby ste parametrizovali nejakú existujúcu, pretože by ste skrátka ani nevedeli, že v projekte nejaká podobná už je. A to je začiatok konca Ako z toho von?
Menné priestory a systém bundlov
Triedy rozdelíme do logických skupín a určite vás neprekvapí, že na tento účel využijeme menných priestorov. To je presne ten nástroj určený na riešenie práve problému s vysokým počtom tried. Ak potom napr. Potrebujeme zdieľať určitú funkčnosť medzi viacerými projektmi, môžeme ju zabaliť do tzv. Symfony bundlov.
BUNDLE môžeme chápať ako samostatné časti, z ktorých sa aplikácia skladá. Ako už bolo spomenuté, môžeme vytvárať vlastné alebo využiť bundlov tretích strán. Tých môže byť aj v menšej aplikácii relatívne veľký počet a slúži ako obdoba pluginov. Mimochodom, samotný Symfony framework je implementovaný pomocou rôznych bundlov.
Ak si potom raz napíšeme vlastný bundle, môžeme ho neskôr použiť aj v ostatných projektoch, ktoré sú postavené na rovnakom systéme a to bez toho aby sme niečo zložito upravovali. V každom projekte budú zároveň len tie bundle, ktoré sú potrebné, aby nebol príliš zložitý alebo aby sme zákazníkovi jednoducho nedávali všetko naše know-how
V tomto projekte si zatiaľ vystačíme iba so základnou projektovú štruktúrou webové aplikácie v Symfony. Pokiaľ ale plánujete väčší projekt, nikdy nie je na škodu premyslieť si jeho potenciálny rozdelenie do bundlov vopred.
Mimochodom, všimnite si, že celý náš web budeme programovať v angličtine, Čeština je v programovaní len pre začiatočníkov a v reálnych aplikáciách by sa objavovať nemala. Dôvodom je najmä fakt, že sa angličtine v kóde nevyhneme (už len samotné PHP je anglicky a budeme používať aj ďalšie triedy tretích strán) a miešať 2 jazyky do seba je neprehľadné.
Potrebný softvér
Pre náš projekt budeme potrebovať klasicky webový server (napr. Apache) s PHP vo verzii 7.1 alebo vyšší a MySQL databázu (prípadne môžete použiť aj inú SQL databázu) a postavíme ho na klasické kostre webové aplikácie website-skeleton pre Symfony verzie 4.1.x. Ak neviete, ako rozchodiť webový server s databázou, odporúčam článok Inštalácia Apache, MySQL a PHP na Windows a ak neviete, ako vytvoriť projekt v Symfony, vrelo odporúčam prečítať si lekciu Inštalácia Symfony a IDE na začiatku kurzu. Teraz teda predpokladám, že máme pred sebou čerstvo nainštalovaný Symfony projekt a vykonáme v ňom niekoľko nasledujúcich zmien.
Príprava projektu
Za predpokladu, že ste to už neurobili, tak priamo do koreňového
priečinka nášho projektu si pridáme súbor .htaccess
, ktorý
zaistí automatické presmerovanie všetkých požiadaviek do zložky
public/
. Tento súbor môže vyzerať napríklad 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>
Ďalej môžeme odstrániť pre nás nepotrebné zložky ako
assets/
a tests/
podľa ľubovôle (v rámci kurzu je
nebudeme potrebovať).
Pridanie vlastného CSS
Na záver si ešte pridáme vlastný CSS.
Public / css / style.css
Vytvoríme si v zložke public/
zložku css/
a do
nej umiestnime súbor style.css
, ktorý bude vyzerať 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; }
Ak sme všetko urobili správne, mali by sme byť stále schopní web spustiť, vidieť úvodnú stránku a naše adresárová štruktúra by mala vyzerať približne takto:
bin/
- Obsahuje spustiteľné PHP skripty, predovšetkýmbin/console
config/
- Obsahuje konfiguráciu projektu (napr. routovanie, služby a pod.)public/
- Koreňový adresár celého webu (prístupový bod, kde všetky umiestnené súbory sú prístupné zvonku)css/
- CSS súbory...
css/
- CSS súbory- ...
src/
- Obsahuje PHP zdrojové kódy nášho projektuController/
- KontroleryEntity/
- Entity...
Controller/
- KontroleryEntity/
- Entity- ...
templates/
- Komponent šablóny (štandardne obsahuje ďalšie podpriečinky pre jednotlivé kontrolery)translations/
- Zložka pre potenciálnych súbory prekladov (slúži pre jazykové mutácie webu)var/
- Úložisko automaticky generovaných súborov (napr. logy, cache, sessions a i.)vendor/
- Knižnice tretích strán poskladané pomocou nástroja Composer
Týmto dnešnej lekcie končí, všetko sme si pekne pripravili a nabudúce sa teda rovno vrhneme na programovanie. Čaká nás O bjektově R elačním M apování nad databázou Teším sa na vás v nasledujúcej lekcii, Jednoduchý redakčný systém v Symfony - Model článkov .