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

Usnadněte si soužití s Doctrine

Usnadněte si soužití s Doctrine

Filip Procházka

October 27, 2013
Tweet

More Decks by Filip Procházka

Other Decks in Technology

Transcript

  1. Usnadněte si soužití s Doctrine Filip Procházka

  2. Co si ukážeme? + Kdyby/Doctrine + Kdyby/Console + Kdyby/Events

  3. Proč Kdyby? - Doctrine má spoustu skvělých vlastností - Doctrine

    má spoustu otravných vlastností - Kdyby je plug&play (convention over configuration), tedy konfigurace na pár řádků a hned můžete pracovat
  4. Instalace $ composer require \ kdyby/doctrine $ composer create-project \

    hosiplan/project
  5. Konfigurace extensions: annotations: Kdyby\Annotations\DI\AnnotationsExtension console: Kdyby\Console\DI\ConsoleExtension events: Kdyby\Events\DI\EventsExtension doctrine: Kdyby\Doctrine\DI\OrmExtension

  6. Konfigurace doctrine: user: foo password: bar dbname: sandbox metadata: App:

    %appDir%
  7. Entita use Doctrine\ORM\Mapping as ORM; /** @ORM\Entity() */ class Article

    extends \Kdyby\Doctrine\Entities\IdentifiedEntity { /** @ORM\Column(type="string") */ protected $title; }
  8. BaseEntity? Ta je přece fuj! class Article extends BaseEntity {

    private $one; protected $two; public $three; }
  9. Skvělé na prototypování $article->getOne(); $article->one; $article->getTwo(); $article->two; $article->getThree(); $article->three; $article->addComment($comment);

    $article->removeComment($comment);
  10. Striktní validace schématu $ php www/index.php \ orm:validate

  11. Entity potřebují tabulky... $ php www/index.php \ orm:schema:up --dump-sql

  12. Proxy třídy kvůli lazy loadingu $ php www/index.php \ orm:generate:proxies

  13. Repository DAO $articles = $entityManager ->getDao(App\Article::getClassName()); $articles = $entityManager ->getDao(App\Article::class);

  14. Ne, repository nestačí... $article = new Article(); $article->title = "The

    Tigger Movie"; $articles->save($article); $article = $articles->find(1); echo $article->title; // "The Tigger Movie"
  15. Repozitář umí hezky nabobtnat class ArticlesDao extends EntityDao { function

    findByTitle($title); function findByStepmothersBrothersEyeColor(); function findBy...(); }
  16. Hlavně žádné další dědění! class ArticlesDao extends EntityDao { function

    findByTitle($title); function findByStepmothersBrothersEyeColor(); function findBy...(); }
  17. Krocení repozitářů http://www.whitewashing.de http://www.whitewashing.de/2013/03/04/doctrine_repositories.html http://filip-prochazka.com/blog/doctrine-a-service-vrstva-aneb-takto-mi-to-dava-smysl

  18. Tak třeba objednávky... OrderModel - Order\UserOpening - Order\Dispatching - Order\Delivery

    - ….
  19. Eventy: systémové listenery class EditLogger implements Kdyby\Events\Subscriber { function getSubscribedEvents()

    { return array('postUpdate'); } function postUpdate() { } }
  20. Eventy: systémové listenery services: something: class: App\EditLogger tags: [kdyby.subscriber]

  21. ResultSet $dql = $articles->createQuery("SELECT a FROM Articles a"); $articles =

    new Kdyby\Doctrine\ResultSet($dql); $articles->applyPaginator($this['vp']->paginator);
  22. Utilitky Helpers::loadFromFile() Tools\NonLockingUniqueInserter

  23. Dotazy?

  24. Filip Procházka http://filip-prochazka.com http://www.kdyby.org