SlideShare a Scribd company logo
4. sraz přátel Symfony - Novoroční posezení
Moje první aplikace v Symfony 3
Praha, 28. 1. 2016, Etnetera a.s.
● 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
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. :)
Zajímavé
Znáš Symfony?
Jo, Symfony znám!
Používám ho skoro měsíc!
Kde Symfony 3 seženu?
Začal bych u zdroje.
Ale já jsem vývojář!
Neexistuje nějaká línější metoda?
Jo, existuje.
Symfony installer
x
Composer
Composer zní sexy!
composer create-project
symfony/framework-standard-edition
my_project_name
Co to udělá?
Moje první aplikace v Symfony 3 + překvapení (4. sraz přátel Symfony v Praze)
composer create-project
symfony/framework-standard-edition
my_project_name
Hej composer vytvoř projekt
do této složky
z tohoto balíčku
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ů.
No a hotovo …
Vaše první aplikace je na světě. :-)
^.^/
Juchůů
Díky za pozornost!
Otázky?Ale teď vážně. Co budeme tvořit?
Jednoduchý “e-shop”
(hodně jednoduchý …)
Jednoduchý “e-shop”
(opravdu hodně jednoduchý …)
Máme málo času.
● 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
Dělám si prdel ;)
1. Katalog produktů
2. Košík / Dokončení objednávky
3. Zabezpečení
4. Přehled objednávek
Co budeme potřebovat?
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
● 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
Moje první aplikace v Symfony 3 + překvapení (4. sraz přátel Symfony v Praze)
But women are always right!
Formulář “male”Formulář “female”
Ano, ale tady budou nalevo.
Obyčejný výpis
Odkaz na routu
do košíku
Flash message
● 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
Moje první aplikace v Symfony 3 + překvapení (4. sraz přátel Symfony v Praze)
Odkaz na routu
pro vymazání
položky z košíku
Odkaz na routu
do katalogu
Formulář
Text ...
Obyčejný výpis
● 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
Moje první aplikace v Symfony 3 + překvapení (4. sraz přátel Symfony v Praze)
Ručně sestavený login form
Flash message
Admin je jen pro vyvolené!
Takže může vypadat hnusně. :D
Moje první aplikace v Symfony 3 + překvapení (4. sraz přátel Symfony v Praze)
No fuuuuuuuuj!!!
Proklik na logout
Odkazy na tento výpis s
parametrem v adrese
Výpis z DB
Můžete změnit stav!!! :O
Wait …
Ještě maily!!!
Moje první aplikace v Symfony 3 + překvapení (4. sraz přátel Symfony v Praze)
Pro smrtelníky
Pro nemrtvé
Nevypadá to zle.
Co? :)
Moje první aplikace v Symfony 3 + překvapení (4. sraz přátel Symfony v Praze)
parameters:
locale: cs
framework:
translator: { fallbacks: ["%locale%"] }
twig:
form-theme: "bootstrap_3_horizontal_layout.html.twig"
Moje první aplikace v Symfony 3 + překvapení (4. sraz přátel Symfony v Praze)
parameters:
admin_password: abcd1234
Extrémní zabezpečení!
Moje první aplikace v Symfony 3 + překvapení (4. sraz přátel Symfony v Praze)
security:
providers:
in_memory:
memory:
users:
admin:
password: "%admin_password%"
roles: "ROLE_ADMIN"
encoders:
SymfonyComponentSecurityCoreUserUser: plaintext
Uživatelé jsou brány z configu a jsou jen jako čistý text.
security:
access_control:
- { path: ^/admin, roles: ROLE_ADMIN }
Pamatují si všichni routy?
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
security:
firewalls:
main:
anonymous: ~
form_login:
login_path: /login
check_path: /login-check
logout:
path: /logout
target: /login
A teď něco, co souvisí s e-shopem.
Nadefinujeme si velikosti triček.
Už by to chtělo nějaký formulář ...
Ok, ale neopičte se! Udělejte si továrničku. ;)
AppBundleFactoryFormFactory
AppBundleFactoryFormFactory
__construct(
FormFactoryInterface $form_factory,
RequestStack $request_stack
)
createAndHandle($name, $type, IEntity $entity)
AppBundleEntityIEntity
Továrničku máme hotovou.
Dáme si jí do services,
ať se nám s ní hezky pracuje. :)
services:
app.factory.form_factory:
class: AppBundleFactoryFormFactory
autowire: true
Jdeme tvořit formulář!!!
^.^/
AppBundleFormProductFormType
AppBundleFormProductFormType
__construct(array $sizes)
AppBundleFormProductFormType
$builder->add('size', ChoiceType::class, ...);
$builder->add('quantity', NumberType::class, ...);
$builder->add('submit', SubmitType::class, ...);
A šup do DI
services:
app.form.product_form_type:
class: AppBundleFormProductFormType
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ář.
Na formulář je navázána
CartItemEntity
Takže si jí teď vytvoříme. :)
AppBundleEntityCartItemEntity
AppBundleEntityCartItemEntity
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.
A další formulář!!!
^.^/
AppBundleFormOrderFormType
AppBundleFormOrderFormType
$builder->add('name', TextType::class, ...);
$builder->add('email', EmailType::class, ...);
$builder->add('note', TextareaType::class, ...);
$builder->add('submit', SubmitType::class, ...);
I na tento formulář je navázána entita.
Tentokrát OrderEntity
Takže si jí taky vytvoříme.
AppBundleEntityOrderEntity
AppBundleEntityOrderEntity
/**
* @DoctrineORMMappingEntity
* @DoctrineORMMappingTable(name="s_order")
*/
Info pro Doctrine, že se jedná o její entitu, která
má být v tabulce "s_order".
AppBundleEntityOrderEntity
/**
* @DoctrineORMMappingId
* @DoctrineORMMappingColumn(type="integer")
* @DoctrineORMMappingGeneratedValue(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.
AppBundleEntityOrderEntity
/** @DoctrineORMMappingColumn(type="string") */
/** @DoctrineORMMappingColumn(type="text", nullable=true) */
Ostatní hodnoty mají jen definovaný typ hodnoty.
AppBundleEntityOrderEntity
/** @DoctrineORMMappingColumn(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.
AppBundleEntityOrderEntity
/**
* @DoctrineORMMappingColumn(type="string")
* @SymfonyComponentValidatorConstraintsEmail()
*/
No a pak je tu ještě jedna věc a to je validační pravidlo pro email. :)
Protože se držíme pravidla “code first”,
tak si teď necháme dle entity
vygenerovat tabulku “s_order”.
Slouží k tomu moc fajn příkaz. :)
php bin/console
doctrine:schema:create
Moje první aplikace v Symfony 3 + překvapení (4. sraz přátel Symfony v Praze)
Už je ale na čase, začít
pracovat s nějakými daty.
Pracovat s daty v controlleru je
Prasárna
Moje první aplikace v Symfony 3 + překvapení (4. sraz přátel Symfony v Praze)
Moje první aplikace v Symfony 3 + překvapení (4. sraz přátel Symfony v Praze)
Moje první aplikace v Symfony 3 + překvapení (4. sraz přátel Symfony v Praze)
Proto si na to vytvoříme
nějakou fajn service.
Co by měla umět?
● pracovat s košíkem
● pracovat s objednávkou
Moje první aplikace v Symfony 3 + překvapení (4. sraz přátel Symfony v Praze)
Začneme tvořit controllery.
Třeba katalogem. :)
AppBundleControllerCatalogController
Ještě nespíte?
Tak budeme pokračovat košíkem. ;)
AppBundleControllerCartController
Poslední a závěrečný controller!
Admin!
AppBundleControllerAdminController
Slouží pro předání
chyby do šablony
Mrtvá metoda, slouží jen
jako placeholder.
Mrtvá metoda, slouží jen
jako placeholder.
AppBundleControllerAdminController
Jen zavolá metodu na service
a výsledek předá šabloně. Jen zavolá
metodu na
service
a udělá
redirect.
security:
firewalls:
main:
anonymous: ~
form_login:
login_path: /login
check_path: /login-check
logout:
path: /logout
target: /login
Moje první aplikace v Symfony 3 + překvapení (4. sraz přátel Symfony v Praze)
Co si z toho odnést?
Méně je více! Nepište zbytečnosti.
Anotace jsou, byly, a budou. Používejte je!
3.
Frameworky pomáhají! Používejte je.
● Controllery: 3
● Entity: 2 + 1 interface
● Factory: 1
● Form: 2
● View: 4 + 2 mail + 1 layout
● Service: 1
Výsledek
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?
Toto bylo zde v ukázkách.
Toto již nyní najdete na webu http://www.symfony.cz
Moje první aplikace v Symfony 3 + překvapení (4. sraz přátel Symfony v Praze)
Moje první aplikace v Symfony 3 + překvapení (4. sraz přátel Symfony v Praze)
https://thewackywordsmith.wordpress.com/
Otázky?

More Related Content

PPT
JavaScript
PDF
Automatizace jednodušše (6. sraz přátel Symfony v Praze)
PPT
Новогодние традиции - украшение елки
PDF
Ansible
PDF
Profiling PHP Applications
PPTX
Čtvrtkon #44 - Symfony php framework
ODP
What makes a good developer from a management perspective
PPTX
Martin Froněk - Jak využít soft skills ve svůj prospěch 2 (15. sraz přátel PH...
JavaScript
Automatizace jednodušše (6. sraz přátel Symfony v Praze)
Новогодние традиции - украшение елки
Ansible
Profiling PHP Applications
Čtvrtkon #44 - Symfony php framework
What makes a good developer from a management perspective
Martin Froněk - Jak využít soft skills ve svůj prospěch 2 (15. sraz přátel PH...

Viewers also liked (18)

PDF
commit => #GitHub => #CircleCI => #Docker => #Kubernetes #AWS cluster
PPTX
Symfony vs Nette vs Phalcon
ODP
Deployment talk dpc 13
PPTX
Andrea carolina vargas y miguelangelvargas cardona
PDF
Llaqta Runaq Rimariynin - Junio 2014
PDF
Perfil kenia
PPTX
Welcome to central web power point
PDF
Glidden at Walmart - NSAC 2013
PPT
Tui itc hotel botánico
PDF
PresentacióN Adaptamos Group 2008
PDF
Symfony2: Get your project started
PDF
Microservice Stategies - Scaling your API design workflow
PDF
Guia de Organos de Participacion Ciudadana
PDF
Bä-Attestation de reussite Monsieur Romain SALESSES (1) 2
PPT
Josep el betlem
PDF
Correveidile 2012.
PPT
Informáguajilin
PDF
Ubyquo tutorial primeros pasos
commit => #GitHub => #CircleCI => #Docker => #Kubernetes #AWS cluster
Symfony vs Nette vs Phalcon
Deployment talk dpc 13
Andrea carolina vargas y miguelangelvargas cardona
Llaqta Runaq Rimariynin - Junio 2014
Perfil kenia
Welcome to central web power point
Glidden at Walmart - NSAC 2013
Tui itc hotel botánico
PresentacióN Adaptamos Group 2008
Symfony2: Get your project started
Microservice Stategies - Scaling your API design workflow
Guia de Organos de Participacion Ciudadana
Bä-Attestation de reussite Monsieur Romain SALESSES (1) 2
Josep el betlem
Correveidile 2012.
Informáguajilin
Ubyquo tutorial primeros pasos
Ad

Similar to Moje první aplikace v Symfony 3 + překvapení (4. sraz přátel Symfony v Praze) (20)

PPTX
Technologie užívané při vývoji velkých e-shopů
PPTX
Woocommerce úpravy funkčnosti a ovlivňování dat
PPTX
Petr Nikolas Prokop - Symfony framework (0. sraz přátel Symfony v Hradci Král...
PDF
Před čím vás Nette ani Symfony neochrání
PPTX
Vašek Purchart - Optimalizace Symfony na devu (2. sraz přátel Symfony v Praze)
PPTX
Optimalizace Symfony na devu
PPTX
MicroKernel - aneb špatný název pro Helper (5. sraz přátel Symfony v Praze)
PPTX
MicroKernel aneb spatny nazev pro Helper (5. sraz pratel Symfony)
PDF
Drupal Front-end
PDF
Jak jsme přepisovali Jobs.cz na Symfony
PDF
Ondra Machulda - Jak jsme přepisovali Jobs.cz na Symfony (1. sraz přátel Symf...
PDF
Hobby Developer 3.0: Tipy a triky pro web
PPTX
Jan Barbořík - Tvoříme fotografický web ve wordpressu aneb jak na funkční web?
PPTX
Symfony & Doctrine @ Webexpo09
PPTX
Výkonnost webových aplikací
PDF
Tomáš Votruba - Jak přežít Symfony 3 (1. sraz přátel Symfony v Praze)
PDF
Jak přežít symfony 3 - 1. sraz přátel Symfony v Praze (in Czech)
ODP
Zend Framework
PPTX
4. WordPress konference - E-commerce řešení pro WordPress
PPTX
Zend Framework 2.0 (ZFMeetup Praha 3.11.2011)
Technologie užívané při vývoji velkých e-shopů
Woocommerce úpravy funkčnosti a ovlivňování dat
Petr Nikolas Prokop - Symfony framework (0. sraz přátel Symfony v Hradci Král...
Před čím vás Nette ani Symfony neochrání
Vašek Purchart - Optimalizace Symfony na devu (2. sraz přátel Symfony v Praze)
Optimalizace Symfony na devu
MicroKernel - aneb špatný název pro Helper (5. sraz přátel Symfony v Praze)
MicroKernel aneb spatny nazev pro Helper (5. sraz pratel Symfony)
Drupal Front-end
Jak jsme přepisovali Jobs.cz na Symfony
Ondra Machulda - Jak jsme přepisovali Jobs.cz na Symfony (1. sraz přátel Symf...
Hobby Developer 3.0: Tipy a triky pro web
Jan Barbořík - Tvoříme fotografický web ve wordpressu aneb jak na funkční web?
Symfony & Doctrine @ Webexpo09
Výkonnost webových aplikací
Tomáš Votruba - Jak přežít Symfony 3 (1. sraz přátel Symfony v Praze)
Jak přežít symfony 3 - 1. sraz přátel Symfony v Praze (in Czech)
Zend Framework
4. WordPress konference - E-commerce řešení pro WordPress
Zend Framework 2.0 (ZFMeetup Praha 3.11.2011)
Ad

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