Předvánoční slevová akce PHP týden
Další šance dokončit svůj projekt a získat ceny v hodnotě 10.000 Kč! Pokračování úspěšné letní soutěže - ITnetwork winter
Využij předvánočních slev a získej od nás 20 % bodů navíc zdarma! Zároveň také probíhá PHP týden se slevou na e-learning až 80 %

Lekce 2 - Instalace Symfony a IDE

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 minulé lekci, Úvod do Symfony frameworku pro PHP, jsme se uvedli do PHP frameworku Symfony. V dnešním tutoriálu se podíváme na jeho instalaci jako základ naší aplikace. Tuto instalaci provedeme pomocí nástroje Composer, buď samostatně pomocí příkazové řádky, nebo v rámci PhpStorm IDE tak, aby se do vývoje mohli pustit i začínající uživatelé, kteří se zrovna doučili OOP a chtějí zkusit používat nějaký PHP framework.

Pro jistotu ještě jednou připomínám, že pro práci s frameworkem je potřeba dobře znát objektově orientované programování v PHP. Pokud ho dostatečně neovládáte, přečtěte si prosím nejprve místní tutoriál. :)

Potřebný software

První věc, kterou je potřeba udělat, je připravit správný software. Určitě víte, že pro vývoj webových aplikací v PHP potřebujete webový server a dále také budeme potřebovat nějakou tu databázi. Pro začátečníky k instalaci doporučuji nějaký kompletní balíček, např. XAMPP.

Pro aktuální Symfony, tedy verzi 4.1.x, budete potřebovat PHP 7.1 a vyšší!

Následně pro ty, co jsou zvyklí psát v textovém editoru jako třeba PSPad, bych doporučil přejít spíše na nějaké IDE, které při práci s frameworkem usnadní jeho používání. Ovšem není to podmínkou. Já zde pro demonstraci instalace ukáži použití PhpStorm, jednoho z nejrozšířenějších profesionálních IDE. Uvidíte sami, že je to s ním krásně jednoduché.

Pokud se ptáte, proč nepoužiji např. populární NetBeans, tak v době psaní kurzu ještě nemají kompletní podporu verze PHP 7.1+, která je ale pro nejnovějšího Symfony vyžadována.

Dále pro samotnou instalaci použijeme snad obecně nejrozšířenější způsob instalace v PHP a to nástroj Composer. Symfony na něm staví jak samotnou instalaci, tak i další rozšíření. Tudíž je potřeba ho také stáhnout a nainstalovat nebo to celé nechat na PhpStorm, který má i zabudované prostředky přímo pro práci s tímto nástrojem. Volba je opět na vás ;)

Vytvoření nového projektu

Začneme tedy vytvořením nového projektu v Symfony. Můžete si zvolit jeden z následujících způsobů.

Možnost 1: Instalace pomocí Composer

Jak už jsem zmiňoval, Composer je nástroj třetích stran pro instalaci a správu závislostí projektů v PHP obecně. Pokud jste jej nikdy nepoužívali, nainstalujte jej pomocí místního článku Composer. Když již máte Composer připravený, stačí si vytvořit složku, kde chcete vytvořit nový projekt, např. `hello-world", a v příkazové řádce z ní spustit konkrétní příkaz, který zařídí celou instalaci Symfony a zkontroluje i potřebné závislosti.

Pokud nevíte, jak spustit příkazový řádek v nějaké složce, dělá se to kliknutím kamkoli do složky v průzkumníku Windows, stisknutím Shift a následně kliknutím pravým tlačítkem a vybráním možnosti "Otevřít zde okno příkazového řádku" (případně okno PowerShell).

Nový projekt tedy vytvoříme jediným příkazem:

composer create-project symfony/website-skeleton hello-world
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Tímto příkazem se vytvořila základní struktura projektu ve složce hello-world/ a to podle Symfony kostry webové aplikace website-skeleton. Ta slouží jako dobrý základ pro nový projekt v tomto frameworku.

Instalace může trvat delší dobu.

Možnost 2: Instalace pomocí PhpStorm

Pokud jste se rozhodli pracovat v PhpStorm a máte vše nainstalováno, zbývá už jen vytvoření samotného projektu. To provedeme obdobně jako v každém jiném IDE, kliknutím na tlačítko pro vytvoření nového projektu.

V nově otevřeném okně se zobrazí průvodce a my vybereme jako typ projektu Composer Project.

Vytvoření PHP Symfony projektu

V dalších krocích:

  1. Vyplníme název projektu, např. hello-world, společně s cestou, kam se má uložit.
  2. Dále nastavíme, že chceme stáhnout Composer a cestu k našemu PHP interpretru (lze detekovat i automaticky).
  3. V neposlední řadě zvolíme, co budeme pomocí Composeru vlastně instalovat. V našem případě to tedy bude Symfony a to konkrétně kostra webové aplikace website-skeleton. Ta slouží jako dobrý základ pro nový projekt v tomto frameworku.

Tímto vytvoříme první projekt postavený na Symfony v rámci PhpStorm IDE pomocí nástroje Composer.

Instalace může trvat delší dobu.

Spuštění projektu

Když již máme vytvořený nový projekt s nainstalovaným Symfony, je načase ho spustit v rámci našeho webového serveru a podívat se na výsledek. Opět zde ale máte na výběr.

Možnost 1: Spuštění pomocí vestavěného serveru

Nejjednodušší možnost, která nevyžaduje žádnou další konfiguraci, je spuštění pomocí vestavěného webového serveru v PHP. Stačí zavolat následující příkaz ve složce projektu:

php -S 127.0.0.1:8000 -t public

V rámci instalované šablony website-skeleton je v projektu k dispozici i webový server vestavěný v Symfony, který spustíme ve složce projektu příkazem:

php bin/console server:run

Můžeme si tedy vybrat, který server budeme používat.

V PhpStorm lze pro obojí nastavit běhovou konfiguraci.

Možnost 2: Spuštění pomocí Apache serveru

Je jasné, že pro spuštění projektu pod Apache serverem je potřeba, aby server běžel, a aby složka projektu byla umístěna někde, kam má Apache přístup. Co už tak jasné není je, že před samotným spuštěním budeme muset nastavit ještě pár přesměrování.

Směrování

Nejprve si je potřeba uvědomit, že adresářová struktura projektu je stavěná tak, že jeho zobrazení probíhá až po vstupu do složky public/, kde se nachází soubor index.php. My ale chceme, aby výsledná adresa začínala názvem projektu (např. http://localhost/hello-world/) a pokračovala konkrétní hezkou URL. Tudíž, žádné public zde nechceme a navíc všechny URL adresy chceme směrovat na tentýž jeden index.php.

Elegantní cesta, jak toto zařídit v rámci Apache serveru, je nastavit směrování pomocí .htaccess souborů, v našem případě pomocí dvou. Jeden nás automaticky "přesune" do složky public/ a tudíž bude kořenová URL adresa pouze http://localhost/hello-world/. Druhý pak zařídí správné směrování na soubor index.php již v rámci samotné složky public/.

Začneme tedy vytvořením prvního souboru .htaccess v adresáři projektu, do kterého vložíme následující kód:

<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>

Druhý soubor už nebudeme vytvářet sami, ale nainstalujeme si ho opět pomocí nástroje Composer tím, že spustíme následující příkaz v kořenové složce projektu:

composer require symfony/apache-pack

Výsledek

Ať už jste se rozhodli pro kteroukoliv metodu, nyní se již dostáváme k dnešnímu výsledku. Po zadání příslušné URL adresy do webového prohlížeče by se vám mělo zobrazit podobné okno, jako vidíte níže na obrázku. Pro vestavěný server bude URL http://127.0.0.1:8000/ a pro Apache http://localhost/hello-world/

Zprovozněný Symfony framework

Pokud toto okno vidíte, potom jste vše udělali správně a jste tím pádem na dobré cestě k naučení se Symfony a k další lekci, kde budeme už i něco programovat.

Pokud se vám tato stránka z nějakého důvodu nezobrazuje, doporučuji znovu poctivě projít návod nebo třeba zkusit jiný způsob instalace či spuštění. A když již opravdu nebudete vědět kudy kam, můžete mi vždy napsat do komentářů pod článek ;)

Příště, v lekci První aplikace v Symfony, začneme vytvářet svou první aplikaci v Symfony. Já prozradím, že se bude jednat o jednoduchou kalkulačku, takže se máte na co těšit! :)


 

Stáhnout

Staženo 51x (14.55 MB)
Aplikace je včetně zdrojových kódů v jazyce PHP

 

 

Článek pro vás napsal Jindřich Máca
Avatar
Jak se ti líbí článek?
8 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. :-)
Předchozí článek
Úvod do Symfony frameworku pro PHP
Všechny články v sekci
Základy frameworku Symfony pro PHP
Miniatura
Následující článek
První aplikace v Symfony
Aktivity (9)

 

 

Komentáře
Zobrazit starší komentáře (13)

Avatar
Milan Novák
Člen
Avatar
Milan Novák:3.12.2018 23:42

Dobrý den,
mohl by my někdo poradit jak nastavit .htacces nebo něco jiného, pokud spouštím projekt z adresy localhpst/symfony kde symfony je vnořený adresář, ve kterém je nainstalován projekt. Prostě v localhostu používám různé projekty, které jsou ve složkách. Bohužel se neustále zobrazuje chyba:No route found for "GET /symfony/"

Pokud spustím projekt přímo ze složky public, tj z adresy localhost/sym­fony/public tak se úvodní (vámi uvedená) obrazovka po instalaci objevý.

 
Odpovědět
3.12.2018 23:42
Avatar
Jindřich Máca
Tým ITnetwork
Avatar
Odpovídá na Milan Novák
Jindřich Máca:3.12.2018 23:57

Dobrý den,

správné nastavení pomocí souboru .htaccess v rámci Apache web-serveru, tak aby se automaticky směrovalo do složky public/, je popsáno přímo v seriálu. Pokud jste postupoval přesně podle něho a nefunguje to, tak je dost možné, že máte něco špatně nastaveno právě v rámci Apache. Např. nemáte nainstalovaný modul mod_rewrite nebo máte vypnuté používání souborů .htaccess. Je tedy potřeba si vše dobře zkontrolovat. :)

Případně o příspěvek výše už jsem posílal odkaz na oficiální dokumentaci Symfony, kde se také píše právě o nastavení .htaccess. ;)

 
Odpovědět
3.12.2018 23:57
Avatar
Milan Novák
Člen
Avatar
Odpovídá na Jindřich Máca
Milan Novák:4.12.2018 9:50

mod_rewirte je nainstalovaný a funguje. Pokud spustím server php bin/console server:run přímo z PHPstormu, tak to funguje. Pokud ovšem použiji svůj server APache, tak to vyhodí No route found for "GET /symfony/". Už jsem zkoušle v .htaccess psí kusy. Určitě to bude blbost. Kořen serveru je v adresáři localhost. Symfony aplikace je v adresáři symfony. Cesta k veřejné části je localhost/sym­fony/public. Nemáte nápad jak na to?
Děkuji

 
Odpovědět
4.12.2018 9:50
Avatar
Jindřich Máca
Tým ITnetwork
Avatar
Odpovídá na Milan Novák
Jindřich Máca:4.12.2018 14:34

No, ještě jsem psal a bylo by dobré zkontrolovat, jestli máš v nastavení Apache povolené .htaccess vůbec používat. Ve výchozím nastavení to totiž většinou bývá vypnuté.

P.S.: Jak na to najdeš na Googlu. ;)

 
Odpovědět
4.12.2018 14:34
Avatar
Milan Novák
Člen
Avatar
Odpovídá na Jindřich Máca
Milan Novák:4.12.2018 14:37

htaccess je povolené a funguje. Když zadám celou adresu http://localhost/symfony/public, tak to jede v pořádku, ale nefunguje to podsunutí pouze přes http://localhost/symfony.

 
Odpovědět
4.12.2018 14:37
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Milan Novák
Člen
Avatar
Odpovídá na Milan Novák
Milan Novák:4.12.2018 14:43

Ještě, věřím, že kdybych to dal přímo do localhostu, tak zmíněná konstrukce htaccess by fungovala, ale jak je to v podsložce, tak na to zaboha nemohu přijít. KDyž se spustí interní server přímo z phpstorm, tak to běhá v pořádku.

 
Odpovědět
4.12.2018 14:43
Avatar
Jindřich Máca
Tým ITnetwork
Avatar
Odpovídá na Milan Novák
Jindřich Máca:5.12.2018 22:39

Teď ti tedy vůbec nerozumím, protože si v jednom komentáři úplně protiřečíš.

htaccess je povolené a funguje. Když zadám celou adresu http://localhost/symfony/public, tak to jede v pořádku, ale nefunguje to podsunutí pouze přes http://localhost/symfony.

Ten .htaccess je právě k tomu, aby to fungovalo na adrese http://localhost/symfony. Když to tam nefunguje, tak ten .htaccess nefunguje nebo je nastaven špatně. Tak jak může fungovat a zároveň nefungovat?

Znovu připomínám, že je to popsané v tom článku, ale tedy ještě jednou polopaticky a po krocích:

1. Přijde uživatel na adresu http://localhost/symfony. Zde je potřeba, aby existoval .htaccess, který ho jednoznačně nasměruje do složky public/, kde se nachází vstupní bod do aplikace. Tudíž v té hlavní složce (symfony/) má být jeden .htaccess, který 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>

2. Uživatel se dostane do složky public/. Je to stejné jako kdyby zadal přímo http://localhost/symfony/public, akorát to směrování je interní. Zde už se tedy nachází soubor index.php, který jako tradičně slouží pro nastartování dané PHP aplikace. Takže pokud je adresa pouze základní, vše funguje.

3. Problém nastává, když zadám například http://localhost/symfony/hello případně http://localhost/…public/hello (opět to samé v rámci interního směrování), protože nyní chceme požadavek na adresu hello/, která ale ve složce public/ není. Tady přichází do hry druhý .htaccess umístěný právě ve složce public/, jehož úkolem je nasměrovat všechno, co zde neexistuje na soubor index.php, tudíž aby zpracování takovéto adresy probíhalo již v rámci samotné aplikace. Tento .htaccess se pak právě instaluje pomocí příkazu:

composer require symfony/apache-pack

Nebo je uveden ve výše odkazované oficiální dokumentaci.

Závěr je tedy takový, že pokud to máš přesně takto a nefunguje to směrování, tak máš špatně nastavený Apache server pro používání .htaccess, jinak jsi udělal chybu někde v tomto postupu. Je to takhle už jasné?

 
Odpovědět
5.12.2018 22:39
Avatar
Odpovídá na Jindřich Máca
Lubomír Mitáš:1. ledna 13:49

Musím říci, že mám úplně stejný problém. Přišel jsem ale na to, že se problém projevuje jenom při ponechání původního index.php. Pokud jsem index.php nahradil svým, kde byl třeba jenom text. Začalo přesměrování fungovat. Před časem jsem již jednou jinde toto instaloval. S problémem jsem se nesetkal, až teď napodruhé. Jestli to nemůže být chybou aktuální distribuce Symfony. Samotný .htaccess funguje pod Apache normálně.

 
Odpovědět
1. ledna 13:49
Avatar
mirextichy
Člen
Avatar
Odpovídá na Lubomír Mitáš
mirextichy:13. března 20:49

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^$ public/ [L] ....... u mně pomohlo zbavit se tohoto lomítka a bylo vše OK, ale zapotilo mně to :)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^public/
RewriteRule ^(.*)$ public/$1
</IfModule>

 
Odpovědět
13. března 20:49
Avatar
Odpovídá na mirextichy
Petr Spěvák:4. dubna 1:48

Díky, u mě taky.

 
Odpovědět
4. dubna 1:48
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 10 zpráv z 23. Zobrazit vše