115
4. sraz přátel Symfony - Novoroční posezení Moje první aplikace v Symfony 3 Praha, 28. 1. 2016, Etnetera a.s.

Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Embed Size (px)

Citation preview

Page 1: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

4. sraz přátel Symfony - Novoroční posezení

Moje první aplikace v Symfony 3

Praha, 28. 1. 2016, Etnetera a.s.

Page 2: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

● muž

● 24 let

● workoholik

● 9+ let se zajímám o vývojwebových aplikací

● 5+ let makám v oboru

● nejsem grafik!!!

Kdo jsem?

Martin Zeman @zemistr

Page 3: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Dřívější a aktuální pozice● Babka: Programátor webových aplikací - puzzle

červenec 2011 - červen 2012 (1 rok)

● OSVČ: Web developerčervenec 2012 - x

● Cresco Group: Web developerčervenec 2012 - srpen 2012 (2 měsíce)

● Cresco Group: Web developerčerven 2014 - listopad 2014 (6 měsíců)

● OSVČ: Web developerTohle je nedůležité … Prostě už mám něco za sebou. :)

Page 4: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Zajímavé

Page 5: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Znáš Symfony?

Page 6: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Jo, Symfony znám!

Page 7: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Používám ho skoro měsíc!

Page 8: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Kde Symfony 3 seženu?

Page 9: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Začal bych u zdroje.

Page 10: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Ale já jsem vývojář!Neexistuje nějaká línější metoda?

Page 11: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Jo, existuje.

Page 12: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Symfony installerx

Composer

Page 13: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Composer zní sexy!

Page 14: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

composer create-projectsymfony/framework-standard-edition

my_project_name

Page 15: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Co to udělá?

Page 16: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)
Page 17: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

composer create-projectsymfony/framework-standard-edition

my_project_name

Hej composer vytvoř projekt

do této složky

z tohoto balíčku

Page 18: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Some parameters are missing.Please provide them.

database_host (127.0.0.1):database_port (null):

database_name (symfony):database_user (root):

database_password (null):mailer_transport (smtp):mailer_host (127.0.0.1):

mailer_user (null):mailer_password (null):

secret (ThisTokenIsNotSoSecretChangeIt):Při instalaci to bude chtít pár údajů.

Page 19: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

No a hotovo …Vaše první aplikace je na světě. :-)

Page 20: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

\^.^/

Juchůů

Page 21: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Díky za pozornost!Otázky?Ale teď vážně. Co budeme tvořit?

Page 22: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Jednoduchý “e-shop”(hodně jednoduchý …)

Page 23: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Jednoduchý “e-shop”(opravdu hodně jednoduchý …)

Máme málo času.

Page 24: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

● Vejce - 4 ks● Cukr - 200 g● Polohrubá mouka - 200 g● Jablka● strouhané - 200 g● Vanilkový cukr - 1 balení● Prášek do pečiva - 1 balení

Co budeme potřebovat?

http://www.recepty.cz/recept/jablkova-babovka-3871

Page 25: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Dělám si prdel ;)

Page 26: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

1. Katalog produktů2. Košík / Dokončení objednávky3. Zabezpečení4. Přehled objednávek

Co budeme potřebovat?

Page 27: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

1. Katalog produktů = “/”2. Košík / Dokončení objednávky

○ "/cart"○ "/cart/{sku}/{size}/remove"

3. Zabezpečení○ "/login"○ "/login-check"○ "/logout"

4. Přehled objednávek○ "/admin/{status}"○ "/admin/{status}/change/{id}/to/{new_status}"

Routy

Page 28: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

● 2 produkty (trička M/F)○ název○ obrázek○ cena○ velikosti○ množství○ a šup do košíku

● košík v sessions

Katalog produktů● náhled košíku

○ název○ velikost○ počet kusů○ cena○ cena celkem○ info o přidání do

košíku

Page 29: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)
Page 30: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

But women are always right!

Page 31: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Formulář “male”Formulář “female”

Ano, ale tady budou nalevo.

Page 32: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Obyčejný výpis

Odkaz na routu do košíku

Flash message

Page 33: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

● výpis produktů○ název○ velikost○ množství○ cena○ smazání z košíku

Košík / Dokončení objednávky● dokončení objednávky

○ jméno○ email○ nějaká ta poznámka○ možnost objednat :)

● po dokončení○ zapsat do db○ odeslat maily

Page 34: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)
Page 35: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Odkaz na routu pro vymazání

položky z košíkuOdkaz na routu

do katalogu

Formulář

Text ...

Obyčejný výpis

Page 36: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

● bezpečnost○ přihlášení○ odhlášení

Přehled objednávek● objednávky

○ kontakt○ poznámka○ cena○ produkty○ stav + změna stavu

● filtr○ dle stavu

Page 37: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)
Page 38: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Ručně sestavený login form

Flash message

Page 39: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Admin je jen pro vyvolené!Takže může vypadat hnusně. :D

Page 40: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)
Page 41: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

No fuuuuuuuuj!!!

Page 42: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Proklik na logoutOdkazy na tento výpis s

parametrem v adrese

Výpis z DB

Můžete změnit stav!!! :O

Page 43: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Wait …Ještě maily!!!

Page 44: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)
Page 45: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Pro smrtelníky

Page 46: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Pro nemrtvé

Page 47: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Nevypadá to zle.Co? :)

Page 48: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)
Page 49: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

parameters: locale: cs

framework: translator: { fallbacks: ["%locale%"] }

twig: form-theme: "bootstrap_3_horizontal_layout.html.twig"

Page 50: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)
Page 51: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

parameters: admin_password: abcd1234

Extrémní zabezpečení!

Page 52: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)
Page 53: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

security: providers: in_memory: memory: users: admin: password: "%admin_password%" roles: "ROLE_ADMIN" encoders: Symfony\Component\Security\Core\User\User: plaintext

Uživatelé jsou brány z configu a jsou jen jako čistý text.

Page 54: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

security: access_control: - { path: ^/admin, roles: ROLE_ADMIN }

Pamatují si všichni routy?

Page 55: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

1. Katalog produktů = “/”2. Košík / Dokončení objednávky

○ "/cart"○ "/cart/{sku}/{size}/remove"

3. Zabezpečení○ "/login"○ "/login-check"○ "/logout"

4. Přehled objednávek○ "/admin/{status}"○ "/admin/{status}/change/{id}/to/{new_status}"

Routy

Page 56: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

security: firewalls: main: anonymous: ~

form_login: login_path: /login check_path: /login-check logout: path: /logout target: /login

Page 57: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

A teď něco, co souvisí s e-shopem.

Page 58: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Nadefinujeme si velikosti triček.

Page 59: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Už by to chtělo nějaký formulář ...

Page 60: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Ok, ale neopičte se! Udělejte si továrničku. ;)

Page 61: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

\AppBundle\Factory\FormFactory

Page 62: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

\AppBundle\Factory\FormFactory

__construct( FormFactoryInterface $form_factory, RequestStack $request_stack)

createAndHandle($name, $type, IEntity $entity)

Page 63: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

\AppBundle\Entity\IEntity

Page 64: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Továrničku máme hotovou.Dáme si jí do services,

ať se nám s ní hezky pracuje. :)

Page 65: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

services: app.factory.form_factory: class: AppBundle\Factory\FormFactory autowire: true

Page 66: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Jdeme tvořit formulář!!!\^.^/

Page 67: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

\AppBundle\Form\ProductFormType

Page 68: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

\AppBundle\Form\ProductFormType

__construct(array $sizes)

Page 69: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

\AppBundle\Form\ProductFormType

$builder->add('size', ChoiceType::class, ...);$builder->add('quantity', NumberType::class, ...);$builder->add('submit', SubmitType::class, ...);

A šup do DI

Page 70: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

services: app.form.product_form_type: class: AppBundle\Form\ProductFormType arguments: [ "%sizes%" ] tags: - { name: form.type }

Formulář je hotov. Protože do něj dáváme hodnoty z DI, je potřeba do DI přidat i formulář.

Page 71: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Na formulář je navázánaCartItemEntity

Takže si jí teď vytvoříme. :)

Page 72: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

\AppBundle\Entity\CartItemEntity

Page 73: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

\AppBundle\Entity\CartItemEntity

Důležité proměnné, které se nemají měnit,předáme v constructoru a dovolíme k nim

přístup jen přes gettery.

Page 74: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

A další formulář!!!\^.^/

Page 75: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

\AppBundle\Form\OrderFormType

Page 76: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

\AppBundle\Form\OrderFormType

$builder->add('name', TextType::class, ...);$builder->add('email', EmailType::class, ...);$builder->add('note', TextareaType::class, ...);$builder->add('submit', SubmitType::class, ...);

Page 77: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

I na tento formulář je navázána entita.Tentokrát OrderEntity

Takže si jí taky vytvoříme.

Page 78: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

\AppBundle\Entity\OrderEntity

Page 79: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

\AppBundle\Entity\OrderEntity

/*** @Doctrine\ORM\Mapping\Entity* @Doctrine\ORM\Mapping\Table(name="s_order")*/

Info pro Doctrine, že se jedná o její entitu, kterámá být v tabulce "s_order".

Page 80: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

\AppBundle\Entity\OrderEntity

/** * @Doctrine\ORM\Mapping\Id * @Doctrine\ORM\Mapping\Column(type="integer") * @Doctrine\ORM\Mapping\GeneratedValue(strategy="AUTO") */

Info pro Doctrine, že proměnná $id bude použita jako sloupeček s číselnou hodnotou a že se do ní bude generovat unikátní ID. Strategie generování unikátního ID se rozhodne dle typu DB.

Page 81: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

\AppBundle\Entity\OrderEntity

/** @Doctrine\ORM\Mapping\Column(type="string") *//** @Doctrine\ORM\Mapping\Column(type="text", nullable=true) */

Ostatní hodnoty mají jen definovaný typ hodnoty.

Page 82: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

\AppBundle\Entity\OrderEntity

/** @Doctrine\ORM\Mapping\Column(type="object") */

Je tu ale jedna extra, do které se bude ukládat složitější struktura.Konkrétně obsah košíku tak, jak se používá i na webu.

Page 83: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

\AppBundle\Entity\OrderEntity

/** * @Doctrine\ORM\Mapping\Column(type="string") * @Symfony\Component\Validator\Constraints\Email() */

No a pak je tu ještě jedna věc a to je validační pravidlo pro email. :)

Page 84: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Protože se držíme pravidla “code first”,tak si teď necháme dle entity

vygenerovat tabulku “s_order”.

Page 85: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Slouží k tomu moc fajn příkaz. :)

php bin/consoledoctrine:schema:create

Page 86: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)
Page 87: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Už je ale na čase, začítpracovat s nějakými daty.

Page 88: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Pracovat s daty v controlleru je

Prasárna

Page 89: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)
Page 90: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)
Page 91: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)
Page 92: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Proto si na to vytvořímenějakou fajn service.

Page 93: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Co by měla umět?● pracovat s košíkem

● pracovat s objednávkou

Page 94: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)
Page 95: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Začneme tvořit controllery.Třeba katalogem. :)

Page 96: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

\AppBundle\Controller\CatalogController

Page 97: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Ještě nespíte?

Page 98: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Tak budeme pokračovat košíkem. ;)

Page 99: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

\AppBundle\Controller\CartController

Page 100: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Poslední a závěrečný controller!Admin!

Page 101: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

\AppBundle\Controller\AdminController

Slouží pro předání chyby do šablony

Mrtvá metoda, slouží jenjako placeholder.

Mrtvá metoda, slouží jenjako placeholder.

Page 102: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

\AppBundle\Controller\AdminController

Jen zavolá metodu na servicea výsledek předá šabloně. Jen zavolá

metodu naservicea uděláredirect.

Page 103: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

security: firewalls: main: anonymous: ~

form_login: login_path: /login check_path: /login-check logout: path: /logout target: /login

Page 104: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)
Page 105: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Co si z toho odnést?

Page 106: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Méně je více! Nepište zbytečnosti.

Page 107: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Anotace jsou, byly, a budou. Používejte je!

Page 108: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

3.

Frameworky pomáhají! Používejte je.

Page 109: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

● Controllery: 3● Entity: 2 + 1 interface● Factory: 1● Form: 2● View: 4 + 2 mail + 1 layout● Service: 1

Výsledek

Page 110: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Mimochodem …Kdo z vás dával pozor a všiml si

několika spojitostí s dějem tady vmístnosti a s tím, co jsem vám ukazoval?

Page 111: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Toto bylo zde v ukázkách.

Page 112: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

Toto již nyní najdete na webu http://www.symfony.cz

Page 113: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)
Page 114: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)
Page 115: Martin Zeman - Moje první aplikace v Symfony 3 (4. sraz přátel Symfony v Praze)

https://thewackywordsmith.wordpress.com/

Otázky?