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

Pierwsze kroki z Sylius E-Commerce

Pierwsze kroki z Sylius E-Commerce

Sylius workshop conducted at PHPCon Poland 2014.

7ae8ff67c92e2087f2e84884449d6da6?s=128

Pawel Jedrzejewski

September 27, 2014
Tweet

Transcript

  1. Pierwsze kroki z Sylius e-commerce Paweł Jędrzejewski PHPCon, 27th September

    2014 Szczyrk, Poland
  2. Paweł Jędrzejewski Founder & Lead Developer Sylius Co-Founder LAKION Symfony

    od czasów pre-alpha !
  3. zatrudniamy w Łodzi careers@lakion.com

  4. ŁÓDŹ

  5. ? Czego używa programista PHP dla e-commerce w 2014?

  6. 1. Zaczyna od zera.

  7. projekt Open source Setki programistów Tysiące godzin Doświadczenie kontrybutorów wiele

    przykładów użycia Darmowe i wczesne testy produkcyjne
  8. 2. Integruje obecnie mainstreamowe produkty. ! Magento, PrestaShop, OpenCart

  9. Często wygląda to tak

  10. Stary świat „PHP” Monolityczny (nie) przyjazny dla developera nietestowalny haki

    haki haki
  11. None
  12. !!! Wynajdywanie koła na nowo jest złe.

  13. jeśli Twoje koło wygląda tak…

  14. …możesz rozważyć jego wymianę

  15. Sylius Modern e-commerce for PHP & Symfony2

  16. czym jest sylius Komponenty PHP e-commerce Symfony bundles Platforma Sylius

  17. czym jest sylius Komponenty PHP e-commerce Symfony bundles Platforma Sylius

  18. platforma Sylius Core Web Interface Symfony Doctrine CMF Payum

  19. ? Co możesz zbudować używając Sylius?

  20. sommelier-prive.de

  21. colorscience.com

  22. artlantis.com

  23. ? Czym różni się Sylius?

  24. 2014 OBJECT ORIENTED PHP • Architektura komponentów • Żadnych Singletonów

    i static asses • Testowalny kod • Brak hacków i magii, również w extension pointsw
  25. nowoczesny Framework • Symfony full-stack wraz z wieloma doskonałymi bibliotekami

    community • Wspólna platforma z OroCRM, Akeneo PIM, Drupal 8, eZ Publish 5
  26. super elastyczność na symfony • Dynamiczne mapowanie modeli • Elastyczność

    Symfony container, parametryzacja klas • Doctrine RTEL • System kalkulatorów dla promocji, opcji wysłek, cen oraz podatków • Eventy eventy eventy + StateMachine • Walidacja nadpisywalna • Format agnostic controllers
  27. Resource management dla orm, Mongo dB ODM i PHPCR ODM

    Sylius Resource Layer ORM MongoDB PHPCR Twój własny storage?
  28. None
  29. Behavior DRIVEN DEVELOPMENT • StoryBDD z Behat zapewnia wysoką jakość

    komunikacji w community • Rozmawiając o nowych funkcjonalnościach oraz bugach wykorzystujemy przykład - scenariusze Behat • Scenariusze te wykonywane są po każdej zmianie na Travis-CI • SpecBDD z phpspec wywołuje (pozytywną) frustrację przy każdej próbie zaprojektowania złego designu • Ogólna jakość i stabilność kodu na najwyższym poziomie
  30. Scenariusze

  31. wykonywane na travis-ci.org

  32. Code quality

  33. w porównaniu do „starych” platform

  34. ? Jak zacząć?

  35. Używanie pojedyńczego komponentu $ composer require sylius/product:v0.10.0 <?php ! $product

    = new Product(); ! $product ->setName(’T-Shirt’) ->setDescription(’Really cool t-shirt’) ;
  36. Instalacja symfony2 bundle $ composer require sylius/cart-bundle:v0.10.0 <?php ! class

    FooController extends Controller { public function barAction() { $cart = $this->get(’sylius.cart_provider’)->getCart(); } } Kilka prostych kroków z documentacji. (2-10 minut)
  37. Instalacja platformy SyliuS $ composer create-project sylius/sylius -s dev $

    cd sylius $ app/console sylius:install $ composer create-project sylius/sylius-standard lub
  38. komponenty and bundles

  39. sylius e-Commerce Product Cart Order Shipping Taxation Payment Inventory Currency

    Pricing Promotion Money Addressing
  40. Uniwersalne komponenty sylius Flow Settings Taxonomy Resource Sequence Variation Attribute

    Locale
  41. translate.sylius.org Over 215 translators!

  42. DOCS.sylius.org

  43. sylius.org

  44. Pobierz WORKSHOP Albo skopiuj z USB $ git clone http://github.com/Lakion/Sylius-Workshops.git

    # composer install —prefer-dist # Zmień hasło DB w parameters.yml $ app/console doctrine:database:create $ app/console doctrine:schema:update —force $ app/console doctrine:fixtures:load $ app/console doctrine:phpcr:repository:init
  45. ? Co będziemy robić z Sylius?

  46. cele warsztatu ★ Dodać producenta do wszystkich produktów ★ Dodać

    interfejs do zarządzania tymi producentami ★ Poznać podstawy architektury Syliusa ★ Poznać standardowe kroki kustomizacji ★ Get excited and have fun
  47. rozszerzanie Sylius • Potrzebujemy dwóch bundles • AppCoreBundle na serwisy,

    logikę biznesową i modele • AppWebBundle na nasz interfejs i dla kustomizacji widoków Sylius • app/console generate:bundle X 2 git / step-1-1
  48. Tworzymy model • Prosta klasa Vendor w App\Bundle\CoreBundle \Entity •

    Mapping doctrine • app/console doctrine:schema:update —force git / step-1-2
  49. Sylius Resource Bundle • Sylius resource management • Dodajemy Vendor

    do listy resources • app/console container:debug | grep ‚vendor’ git / step-1-3
  50. Generujemy formularz • Potrzebujemy formularz by dodawać oraz edytować producentów

    • app/console doctrine:generate:form AppCoreBundle:Vendor • Kilka modyfikacji w klasie formularza • Nazwa typu - app_vendor git / step-1-4
  51. nasz przyjaciel ROUTER • Potrzebujemy bardzo prosty routing (AppWebBundle/Resources/routing) •

    indexAction • createAction • updateAction • deleteAction git / step-1-5
  52. Pliki routingu • AppWebBundle/Resources/config/_routing.yml • AppWebBundle/Resources/config/routing/ backend/_main.yml • AppWebBundle/Resources/config/routing/ backend/vendor.yml

    git / step-1-5
  53. index app_backend_vendor_index: pattern: / methods: [GET] defaults: _controller: app.controller.vendor:indexAction

  54. CREATE & UPDATE app_backend_vendor_create: pattern: /new methods: [GET, POST] defaults:

    _controller: app.controller.vendor:createAction _sylius: redirect: app_backend_vendor_update ! app_backend_vendor_update: pattern: /{id}/edit methods: [GET, PUT, POST] defaults: _controller: app.controller.vendor:updateAction _sylius: redirect: app_backend_vendor_update
  55. DELETE app_backend_vendor_delete: pattern: /{id} methods: [DELETE] defaults: _controller: app.controller.vendor:deleteAction _sylius:

    redirect: app_backend_vendor_index
  56. Dodajemy widoki • Chcemy wyświetlać listę producentów w backend •

    2 proste szablony do edycji • Osobny template dla formularza by ograniczyć duplikację git / step-1-6 git / step-1-7
  57. Kustomizacja modelu Produktu • Nowa klasa produktu App\Bundle\CoreBundle \Entity •

    getVendor() & setVendor() • Dodajemy nową klasę do konfiguracji w sekcji sylius_product git / step-1-8
  58. Mapping dla nowych pól • W AppCoreBundle/Resources/config/doctrine • Product.orm.yml •

    Relacja do Vendor git / step-1-9
  59. Modyfikujemy product form • Prosta klasa ProductType • Nadpisujemy metodę

    buildForm • Dodajemy pole „vendor” typu entity • Nadpisujemy szablon • SyliusWebBundle:Backend/Product/Form:_main.html.twig git / step-1-10
  60. App Web EXTENDS SYLIUS WEB • getParent() jest kluczem do

    sukcesu • Dziedziczenie bundles • Uwaga na konflikty nazw plików routingu git / step-1-11
  61. Dodajemy pozycję do BACKEND MENU • MenuBuilderListener w AppWebBundle •

    Rejestrujemy go w services.yml • KnpMenuBundle = Wystarczy dodać nową pozycję z linkiem do listy zamówień git / step-1-12
  62. Jak możesz wykorzystać pozostałe komponenty Sylius? • Dodajmy adres do

    modelu Vendor • Wasza kolej
  63. @pjedrzejewski @Sylius @Lakion pjedrzejewski.com sylius.org lakion.com dzięki!