September discount week
Pouze tento týden sleva až 80 % na e-learning týkající se MS Office
50 % bodů zdarma na online výuku díky naší Slevové akci!

Lekce 2 - Instalace Symfony a IDE

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 instalaci Symfony 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).

Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

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

composer create-project symfony/website-skeleton hello-world

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, se můžete těšit na první aplikaci v Symfony. Bude se jednat o jednoduchou kalkulačku :)


 

Stáhnout

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

 

Předchozí článek
Úvod do Symfony frameworku pro PHP
Všechny články v sekci
Základy frameworku Symfony pro PHP
Článek pro vás napsal Jindřich Máca
Avatar
Jak se ti líbí článek?
11 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 (12)

 

 

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

Avatar
Milan Novák
Člen
Avatar
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
Redaktor
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
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
Redaktor
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
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Odpovídá na Jindřich Máca
Lubomír Mitáš:1.1.2019 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.1.2019 13:49
Avatar
mirextichy
Člen
Avatar
Odpovídá na Lubomír Mitáš
mirextichy:13.3.2019 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.3.2019 20:49
Avatar
Odpovídá na mirextichy
Petr Spěvák:4.4.2019 1:48

Díky, u mě taky.

 
Odpovědět
4.4.2019 1:48
Avatar
Peter Večera
Brigádník
Avatar
Peter Večera:26. dubna 10:01

Ahoj mal som rovanký problém, server mám xamp a pomohlo premenovat pôvodný index.php na index2.php a vytvoril som novy index.php s obsahom phpinfo();
Len som nepochopil či má byť v url adrese public/ ?
keď zadám url: http://localhost/hello-world
tak ma to presmeruje na http://localhost/…world/public
a v ramci hezkých url by to tam byt nemalo nie ?

 
Odpovědět
26. dubna 10:01
Avatar
Peter Večera
Brigádník
Avatar
Peter Večera:26. dubna 10:04

a keď spustím php server cez príkaz:
C:\xampp\htdoc­s\hello-world>php -S 127.0.0.1:8000 -t public
tak url funguje ok:
http://127.0.0.1:8000/

 
Odpovědět
26. dubna 10:04
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 25. Zobrazit vše