Tour d'horizon
Pré-requis
PHP 7.1.3
iconv
json_encode
session_start
ctype_alpha
token_get_all
simplexml_import_dom
PCRE extension
Symfony Flex
Installation automatisée de packages, plus de configurations manuelles dans le AppKernel pour démarrer
composer req cli
Installe et "enregistre" via une "recette" le composant cli
composer rem cli
Supprime et enlève la configuration pour le composant cli
"surcouche" composer
Trouver les recettes flex
- sec-checker to install the SensioLabs Security Checker;
- req-checker to install the Symfony requirements checks;
- log to install MonologBundle and all its dependencies;
- template for Twig;
- mailer for Swiftmailer;
- profiler for the profiler;
- ...
Exemples noms de recettes Flex
Services auto-enregistrés
et auto-configurés
En finir avec la configuration rébarbative
- Par défaut, enregistrement automatique en service privé
- Le namespace sert à identifier le service (FQCN)
- Autowiring : on a juste à typer les arguments pour que l'injection se fasse :
public function __construct(InvoiceGenerator $generator)
- Auto tagging : par exemple juste en implémentant l'interface EventSubscriberInterface, pas besoin de déclarer comme avant la liaison à l'event
3.3+
Micro
a new Symfony 4 app is 70% smaller than Symfony 3.
Symfony is a micro-framework out-of-the-box!
"Install what you need"
(bye bye silex)
Performance
Every part of Symfony optimized and re-optimized
With #Symfony 3.4/4.0, enabling param `container.dumper.inline_class_loader` can boost your dev env perf by 50% and your prod by +2%. For free as usual :) /cc
Squeezing 6% out of a trimmed #Symfony 3.4/4.0 Hello World? Achieved! Inlining the hot path, that's the trick. Another @blackfireio success ;-)
Conventions
A Symfony 4 app has a smaller directory structure, less "Symfony-ideas" and uses more standard ideas.
├── assets
├── bin
│ ├── console
├── config # All configuration goes here
│ ├── packages
│ │ ├── dev # Specific env config
│ ├── framework.yaml
│ ├── routing.yaml
│ ├── bundles.php # Array of bundles (auto generated)
│ ├── routes.yaml
│ ├── services.yaml
├── public # Web exposed folder (ex "web folder")
│ ├── index.php # Entry point, no more app_dev.php and app.php (No config.php.
│ # No .htaccess. No favicon.ico or apple-touch-icon.png. Not even robots.txt)
├── src # All your code goes here
│ ├── Controller
│ │ ├── ...
│ ├── Kernel.php
├── templates
├── tests
├── translations
├── var
│ ├── cache
│ ├── log
├── vendor
├── .env
├── .env.dist # env vars template (parameters replacement)
├── composer.json
├── composer.lock
├── symfony.lock # Symfony lock for flex recipes
Preview
Symfony Maker Bundle
Remplaçant du SensioGeneratorBundle
Pas encore complet sur tous les aspects :
Later we'll add more commands, including some interactive makers to generate a Doctrine entity asking for its properties, to generate a form based on a Doctrine entity, etc.
Aperçu à date :
php bin/console list make
make:command
make:controller
make:entity
make:form
make:functional-test
make:subscriber
make:twig-extension
make:unit-test
make:validator
make:voter
Webpack Encore
Managing CSS and JavaScript
Recommandation officielle à partir de maintenant
Outil basé sur Node.js + webpack
- Minification / Assemblage / Versioning d'assets (option cdn),
- JS Modules, Shared library, Babel, Typescript ...
- SASS/Less, PostCSS, autoprefix, CSS dans des modules JS,
- support moderne React.js / Vue.js,
- serveur de dev, hot module replacement
- ...
Assetic vs Encore
Should I Upgrade from Assetic to Encore
If you already have Assetic working in an application, and haven't needed any of the features that Encore offers over Assetic, continuting to use Assetic is fine. If you do start to need more features, then you might have a business case for changing to Encore.
Assetic | Encore | |
---|---|---|
Language | Pure PHP, relies on other language tools for some tasks | Node.js |
Combine assets? | Yes | Yes |
Minify assets? | Yes (when configured) | Yes (out-of-the-box) |
Process Sass/Less? | Yes | Yes |
Loads JS Modules? | No | Yes |
Load CSS Deps in JS? | No | Yes |
React, Vue.js support? | No | Yes |
Support | Not actively maintained | Actively maintained |
Migrer vers symfony 4
Ce qui à l'air le plus compliqué est la nouvelle architecture de dossiers, car si on ne la suit pas on ne bénéficiera pas des bénéfices de symfony flex.
La documentation préconise de commencer par un projet vierge symfony 4 et d'y migrer le code
A voir également pour les projets découpés en bundles / bundles avec héritage sur leur migration qui devrait poser problème car on passe d'un système d'override à un système "à plat"
Prêt pour la prod ?
en général, ça dépend beaucoup des bundles !
A la lecture de ce document, on voit que c'est encore trop tôt, si vous avez un projet reposant sur des bundles tiers, même si la version 4.0 de symfony est prête pour la production
Essayer
composer create-project symfony/skeleton my_project
Welcome Symfony 4
By Sylvain Combes
Welcome Symfony 4
Tour rapide de Symfony 4
- 1,241