Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Moje první aplikace v Symfony 3 + překvapení (4. sraz přátel symfony)

Moje první aplikace v Symfony 3 + překvapení (4. sraz přátel symfony)

90% webových aplikací funguje stylem "získám uživatelská data, uložím si je do nějakého storage a pak si je prohlédnu na bezpečné stránce".
Se Symfony 3 je tohle otázka pár minut.

Martin Zeman

January 28, 2016
Tweet

More Decks by Martin Zeman

Other Decks in Programming

Transcript

  1. 4. sraz přátel Symfony - Novoroční posezení Moje první aplikace

    v Symfony 3 Praha, 28. 1. 2016, Etnetera a.s.
  2. • muž • 24 let • workoholik • 9+ let

    se zajímám o vývoj webových aplikací • 5+ let makám v oboru • nejsem grafik!!! Kdo jsem? Martin Zeman @zemistr
  3. 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 developer Tohle je nedůležité … Prostě už mám něco za sebou. :)
  4. 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ů.
  5. • 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
  6. 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
  7. • 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
  8. • 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
  9. Odkaz na routu pro vymazání položky z košíku Odkaz na

    routu do katalogu Formulář Text ... Obyčejný výpis
  10. • 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
  11. Proklik na logout Odkazy na tento výpis s parametrem v

    adrese Výpis z DB Můžete změnit stav!!! :O
  12. parameters: locale: cs framework: translator: { fallbacks: ["%locale%"] } twig:

    form-theme: "bootstrap_3_horizontal_layout.html.twig"
  13. 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.
  14. 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
  15. 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ář.
  16. \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.
  17. \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.
  18. Protože se držíme pravidla “code first”, tak si teď necháme

    dle entity vygenerovat tabulku “s_order”.
  19. \AppBundle\Controller\AdminController Slouží pro předání chyby do šablony Mrtvá metoda, slouží

    jen jako placeholder. Mrtvá metoda, slouží jen jako placeholder.
  20. • Controllery: 3 • Entity: 2 + 1 interface •

    Factory: 1 • Form: 2 • View: 4 + 2 mail + 1 layout • Service: 1 Výsledek
  21. Mimochodem … Kdo z vás dával pozor a všiml si

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