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

Zend Framework 2 and Symfony2: The Perfect Team (ZendCon)

Zend Framework 2 and Symfony2: The Perfect Team (ZendCon)

The next generation of frameworks is upon is, and now that they're more decoupled and component-based than ever before and use the same standard for naming and autoloading, there is no reason to stick to a single framework for your projects. During this session, we will go through several ways of combining Zend Framework 2 and Symfony2, so that you walk away being able to focus even more on on writing the complex custom logic your project needs, and don't have to worry about the rest.

Stefan Koopmanschap

October 25, 2012
Tweet

More Decks by Stefan Koopmanschap

Other Decks in Programming

Transcript

  1. Zend Framework 2 and Symfony2:
    Zend Framework 2 and Symfony2:
    The Perfect Team
    The Perfect Team
    Stefan Koopmanschap, Enrico Zimuel

    View Slide

  2. About us

    Stefan Koopmanschap

    Enterpreneur: Ingewikkeld and
    Techademy

    Symfony Community Manager

    Co-Founder PHPBenelux, now
    PFZ.nl

    [email protected]

    Enrico Zimuel

    Software Engineer at Zend
    Technologies

    Zend Framework Core Team

    Co-founder PUG Turin

    [email protected]

    View Slide

  3. PHP frameworks

    Symfony and Zend Framework are the most
    used PHP frameworks worldwide

    Both offer a tons of features that can improve
    the development of web applications

    Modular architectures and high quality PHP
    code (SoC + SOLID principles)

    Why don't use it together to get the best
    features of both?

    View Slide

  4. Religion war?
    ZF sucks!
    Symfony?
    Oh My!

    View Slide

  5. Instead of think about
    ZF2 || Symfony 2
    think about
    ZF2 && Symfony 2

    View Slide

  6. PSR-*

    Framework interoperability standards

    Meant to make it easier to work with multiple
    frameworks

    Naming standards and coding standards

    For instance: Only one autoloader!

    https://github.com/php-fig/fig-standards

    View Slide

  7. PSR-0
    Naming guidelines
    Directory structure

    View Slide

  8. PSR-1
    Coding standards

    View Slide

  9. PSR-2
    Code style

    View Slide

  10. PSR-next
    Caching
    Documentation standard (Docblock)

    View Slide

  11. Composer

    Composer (getcomposer.org) can help the
    management of projects that use ZF2 and
    Symfony2
    – Select your favorite ZF2 and Symfony2
    components using composer.json
    – $ php composer.phar install
    – Components installed in /vendor
    – Include the /vendor/autoload.php in your PHP
    code, that's it!

    View Slide

  12. Easily Integrate Zend Framework 2 and
    Other Libraries Using Composer
    Ryan Weaver
    Thursday 8:00 AM
    Room 209

    View Slide

  13. How to integrate
    How to integrate
    Zend Framework 2 in Symfony 2
    Zend Framework 2 in Symfony 2

    View Slide

  14. composer create-project
    symfony/framework-standard-edition
    project

    View Slide

  15. Composer.json
    "repositories": [
    {
    "type": "composer",
    "url": "http://packages.zendframework.com/"
    }
    ],

    View Slide

  16. Composer.json
    "require": {
    "php": ">=5.3.3",
    "symfony/symfony": "2.2.*",
    (...)
    "zendframework/zend-crypt": "2.0.*"
    },

    View Slide

  17. composer update

    View Slide

  18. View Slide

  19. Now let's get to work

    View Slide

  20. Register Crypt class as service

    View Slide

  21. src/ZendCon/CryptBundle/Resources/config/services.xml

    View Slide

  22. src/ZendCon/CryptBundle/Controller/CryptController.php
    src/ZendCon/CryptBundle/Resources/views/Crypt/index.html.twig

    View Slide

  23. http://zendcon.local/crypt

    View Slide

  24. src/ZendCon/CryptBundle/Controller/CryptController.php
    src/ZendCon/CryptBundle/Resources/views/Crypt/check.html.twig

    View Slide

  25. http://zendcon.local/crypt

    View Slide

  26. Other (better?) solutions

    Do validation in Entity

    Use Symfony2 Validator

    View Slide

  27. BlockCipher

    View Slide

  28. src/ZendCon/CryptBundle/Controller/CryptController.php
    src/ZendCon/CryptBundle/Resources/views/Crypt/blockcipher.html.twig

    View Slide

  29. http://zendcon.local/crypt/block

    View Slide

  30. Some stuff I won't show...

    Zend\Barcode

    Zend\Captcha

    Zend\Feed

    Zend\I18n

    ZendService_*

    View Slide

  31. How to integrate
    How to integrate
    Symfony2 in Zend Framework 2
    Symfony2 in Zend Framework 2

    View Slide

  32. How to use Symfony2 in ZF2

    Use composer.json to include the Symfony2
    components

    Execute the update (or install) command of composer

    The Symfony2 composer will be installed in /vendor

    MVC approach:

    Register the Symfony2 components in the
    ServiceManager

    “Standard” approach:

    Use the Symfony2 components directly (instantiate
    the class and use it)

    View Slide

  33. composer.json
    {
    "require": {
    "php": ">=5.3.3",
    "zendframework/zendframework": "2.0.*",
    "symfony/yaml": "2.2.*",
    "symfony/dom-crawler": "2.2.*",
    },
    "autoload": {
    "psr-0": {
    "Application": "module/Application/src"
    }
    }
    }

    View Slide

  34. Symfony component as a service
    // a module config "module/SomeModule/config/module.config.php"
    return array(
    'service_manager' => array(
    'services' => array(
    // Keys are the service names
    // Values are objects
    'YamlParser' => new Symfony\Component\Yaml\Parser(),
    'DomCrawler' => new Symfony\Component\DomCrawler\Crawler(),
    // ...
    ),
    )
    );

    View Slide

  35. Symfony component as a factory
    // a module config "module/SomeModule/config/module.config.php"
    return array(
    'service_manager' => array(
    'factories' => array(
    // Keys are the service names.
    // Valid values include names of classes implementing
    // FactoryInterface, instances of classes implementing
    // FactoryInterface, or any PHP callbacks
    'YamlParser' => 'Symfony\Component\Yaml\Parser',
    'DomCrawler' => 'Symfony\Component\DomCrawler\Crawler',
    // ...
    ),
    )
    );

    View Slide

  36. Use a service in a Controller
    class AlbumController extends AbstractActionController
    {
    public function indexAction()
    {
    $sm = $this->getServiceLocator();
    $yamlParser = $sm->get('YamlParser');
    $domCrawler = $sm->get('DomCrawler');
    }
    // ...
    }

    View Slide

  37. Symfony 2 components

    Some components useful for ZF2 users:
    – BrowserKit (simulates a web browser)
    – CssSelector
    – Filesystem
    – Finder (file search)
    – OptionsResolver
    – Process (executes commands in sub-processes)
    – Serializer (handle serializing data structures)
    – YAML parser

    View Slide

  38. Concluding
    Concluding

    View Slide

  39. To integrate

    PSR / Framework Interoperability

    Composer

    Pick your components

    Don't stop at Zend Framework/Symfony

    Don't Reinvent The Wheel!

    View Slide

  40. Where to go?
    http://packagist.org

    View Slide

  41. Thanks!
    http://framework.zend.com
    Give feedback:
    https://joind.in/7035
    http://www.symfony.com

    View Slide