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

Symfony 4 / Flex

Symfony 4 / Flex

Keynote about Symfony 4 / Flex at SymfonyCon Cluj 2017

Fabien Potencier

November 17, 2017
Tweet

More Decks by Fabien Potencier

Other Decks in Programming

Transcript

  1. What is Symfony 4? = Symfony 3.4 LTS - deprecated

    features - long term support - PHP 5 support + new dev workflow via Flex
  2. Flex in 1 sentence Flex helps developers manage the life-cycle

    of project dependencies by automating boring tasks, For projects of any size, from micro to monolith, For any kind of applications, API or Web.
  3. Flex in 10 seconds Projects do not depend on symfony/symfony

    No third-party dependencies/bundles Add dependencies when you need them Nothing to remove, the bare minimum
  4. Flex behind the scenes Composer plugin Uses “recipes” to install/uninstall

    any Composer package (enables bundles, auto-configures packages, …)
  5. $ composer create-project symfony/skeleton demo # Before Symfony 4 stable

    $ composer create-project -s beta symfony/ skeleton demo
  6. symfony/skeleton "require": { "php": "^7.0.8", "symfony/console": "^4.0", "symfony/flex": "^1.0", "symfony/framework-bundle":

    "^4.0", "symfony/lts": "^4@dev", "symfony/yaml": "^4.0" }, "require-dev": { "symfony/dotenv": "^4.0" },
  7. $ tree -I vendor $ find . -type f |

    wc -l Symfony 4 is lightweight Only 13 files vs 31 SE 2503 total vs 8867 SE -70%
  8. New directory structure • Less depth, easier to navigate •

    Non-PHP files in their own directories (assets/, templates/) • Decoupled from Symfony (assets/, src/, templates/, public/)
  9. Symfony Standard Edition Monolog Bundle SwiftMailer Bundle Polyfill Util Polyfill

    PHP 7.0 Polyfill PHP 5.6 Polyfill Mbstring Polyfill Intl ICU Polyfill APCu PHPUnit Bridge Debug Bundle Framework Bundle Security Bundle Twig Bundle WebProfiler Bundle WebServer Bundle Doctrine Bridge Monolog Bridge Twig Bridge Monolog Doctrine (11) SecurityChecker Generator Bundle ParamHandler FrameworkExtra Bundle Distribution Bundle Asset BrowserKit Cache ClassLoader Config Console CssSelector Debug DependencyInjection DomCrawler Dotenv EventDispatcher ExpressionLanguage Filesystem Finder Form HttpFoundation HttpKernel Inflector Intl Ldap OptionsResolver Process PropertyAccess PropertyInfo Routing Security Serializer Stopwatch Templating Translation Validator VarDumper WebLink Workflow Yaml 4 bridges 15 librairies 11 bundles 42 components SwiftMailer
  10. Symfony Flex / Symfony 4.0 Polyfill Mbstring Framework Bundle Cache

    Config Debug DependencyInjection Dotenv EventDispatcher Filesystem Finder HttpFoundation HttpKernel Routing Yaml 0 bridges 1 library 1 bundle 13 components Flex
  11. Aliases • Shortcuts for common packages (log, behat, phpunit, …)

    • Optimized for Symfony Components (no need to use the symfony/ prefix, just workflow, dom-crawler, …) • Opinionated choices (admin, api, orm, mailer, …)
  12. Adding a Twig Extension Where do I store the Twig

    extension class? Which file do I need to change to register it? Which tag do I need to use? How do I declare a tag in YAML? Which interface/class do I need to implement/ extend? It’s too complex. What about doing it the dirty way and do it in the controller instead? hmm, ok
  13. Full Automation works for… • Twig extensions • Event listeners

    • Doctrine repositories • Commands • Voters • …
  14. Beyond “Hello World” • Defining some models via Doctrine •

    Adding an API for my model • Managing data with an admin
  15. DSNs parameters: database_host: 127.0.0.1 database_port: null database_name: symfony database_user: root

    database_password: null Symfony 2/3 Symfony 4 DATABASE_URL = "mysql://[email protected]:3306/symfony" MAILER_URL REDIS_URL …
  16. Symfony 4 with Flex recap • Auto-configuration for any Composer

    package • A new Maker bundle to simplify creating files • Support for Flex private repositories • No more boilerplate code, just business logic • Controllers and commands are services now • From micro to monolith • Meta-packages doing a lot for you out of the box Productivity boost! Better DX
  17. More with Symfony 4 • Dependency injection without thinking about

    it • API Platform, the most advanced API system • Admin, simple and powerful • Symfony Encore, makes working with Webpack enjoyable Talk at Cluj! Talk at Cluj! Talk at Cluj!
  18. More with Symfony 4 HTTP2 push support Inject secrets as

    parameters (Docker/K8s) Built-in PSR-3 logger Env vars where it makes sense DI simplified, classes as IDs PSR-11, PSR-6, PSR-16 out of the box Private services by default
  19. Env/Debug mode // web/app_dev.php $kernel = new AppKernel('dev', true); $request

    = Request::createFromGlobals(); // ... // web/app.php $kernel = new AppKernel('prod', false); $request = Request::createFromGlobals(); // ... Symfony 2/3 Symfony 4 # .env APP_ENV = dev APP_DEBUG = 1 Enables the merge of
 app.php and app_dev.php to a single index.php
  20. … which simplifies running commands # Symfony 2/3 $ ./bin/console

    foo:bar --env=prod —no-debug $ SYMFONY_ENV=prod SYMFONY_DEBUG=0 ./bin/console foo:bar # Symfony 4 $ ./bin/console foo:bar
  21. Symfony Standard Edition • Not available for Symfony 4 •

    But still maintained for Symfony 2.7 -> 3.4 • EOL November 2020 Use Flex
  22. Symfony Installer • Not available for Symfony 4 • But

    still maintained for Symfony 2.7 -> 3.4 • EOL November 2020 Use plain Composer and Flex
  23. symfony/symfony as a dep • Won’t be enforced • But

    strongly not recommended • Won’t be removed as still the best way to manage the project Use explicit dependencies
  24. symfony 1 • Last major release 7 years ago •

    End of life 5 years ago • End of infrastructure: December 2017 Use Symfony 2/3/4
  25. No longer recommended • Symfony Standard Edition (EOL nov 2020)

    • Symfony Installer (EOL nov 2020) • symfony/symfony as a Composer dep (EOL nov 2020) • Silex (EOL june 2018) • symfony 1 (EOL dec 2017)
  26. Current “integrations”, small and big • Monolog • Gmail support

    in semantic configuration • Assetic / Encore • Bootstrap 3 / 4
  27. Some “random” ideas • Search engine: Algolia, ElasticSearch • Multi-factor

    authentication (Google Authenticator) / SAML • Structured logs • VueJS • Queues / Workers • Transactional email providers (Mailgun, Postmark, …) • Payment gateways (Stripe) • …