Symfony4 A new way to develop web applications Antonio Perić-Mažar, Locastic
Antonio Perić-Mažar CEO @ Locastic Co-Organizer @ BlockSplit Conference Tinel Meetup antonio@locastic.com @antonioperic @antonioperic
Locastic ● We help clients create amazing web and mobile apps (since 2011) ○ mobile development ○ web development ○ UX/UI ○ Training and Consulting ● @locastic ● www.locastic.com ● Split, Croatia @antonioperic
@antonioperic Photo: Goran Leš
Text @antonioperic https://lifestyle.clickhole.com/the-evolution-of-man-7-new-physical-traits-that-humans-1825122200
Text @antonioperic
Text @antonioperic
Text @antonioperic
Text @antonioperic 30.11.2017
@antonioperic Fabien Potencier
We can do better ● Installing a Bundle is too cumbersome ● Remove a Bundle is too cumbersome @antonioperic
We can do better ● Installing a Bundle is too cumbersome ● Remove a Bundle is too cumbersome ● The standard edition is not good enough @antonioperic
We can do better ● Installing a Bundle is too cumbersome ● Remove a Bundle is too cumbersome ● The standard edition is not good enough ● You always have a lot of code that you are not using but it is to hard to remove it @antonioperic
@antonioperic Fabien Potencier
Symfony4 ● Starting as micro framework ● Compose your application / setup your stack ● Build API, console app, traditional web app or whatever you want @antonioperic
@antonioperic
Symfony Flex ● Composer plugin ● Auto-configuration via recipes @antonioperic
Symfony Flex ● Composer plugin ● Auto-configuration via recipes @antonioperic Fabien Potencier
Symfony flex @antonioperic
Symfony flex @antonioperic
Mailer manifest.json @antonioperic
Symfony flex recipies ● Two repositories ● symfony/recipies ○ maintained by Symfony Core Team and holds only recipies for Symfony components and bundles ‘opinionated’ by them ○ Can use alias ● symfony/recipies-contrib ○ Anyone can contribute ○ Cannot use alias @antonioperic
www.symfony.sh @antonioperic
Directory structure @antonioperic
Directory structure @antonioperic
Directory structure @antonioperic we say goodby to app.php and app_dev.php — this is now one standard index.php file and environment is set with environmental variable APP_ENV
Directory structure @antonioperic
Directory structure @antonioperic
Directory structure @antonioperic
Directory structure @antonioperic Flex keeps tracks of the recipes it installed in a symfony.lock file, which must be committed to your code repository.
Bundle-less applications ● Bundle vs no-bundle apps ● All in src folder ○ App/ namespace ○ You should separate, but no need for bundles ● Moving forward to standardisation ● It reduces the perceived complexity, also makes your code feels more decoupled from symfony ● Bundle inheritance mechanisms are deprecated in 3.4 and were removed in 4.0 @antonioperic
Let’s call this a small demo - Our task will be to create simple Symfony console application, a web crawler - Steps: - Create new symfony application - composer create-project symfony/skeleton my_project - Add Console component - Add Doctrine - Add Symfony Crawler component - Do some code (we will not do code, idea is just to see the flow of working with Symfony4) @antonioperic
Create new Symfony4 application @antonioperic
Create new Symfony4 application @antonioperic
Add components ● Composer req cli ● Composer req doctrine ● Composer req symfony/dom-crawler @antonioperic
Autowiring ● Introduced in Symfony 3 version ● Autowiring allows you to manage services in the container with minimal configuration ● It reads the type-hints on your constructor (or other methods) and automatically passes the correct services to each method. ● Symfony's autowiring is designed to be predictable: if it is not absolutely clear which dependency should be passed, you'll see an actionable exception. @antonioperic
Autowire @antonioperic
Autowiring @antonioperic
Symfony Webpack Encore ● Webpack encore is a simpler way to integrate Webpack into your application ● Step forward after AsseticBundle ● composer require webpack-encore ● It can work outside of Symfony @antonioperic
About me Text @antonioperic
DotEnv component ● The Dotenv Component parses .env files to make environment variables stored in them accessible via getenv(), $_ENV or $_SERVER. ● composer require symfony/dotenv @antonioperic
DotEnv component @antonioperic
Performance Hello world test @antonioperic Fabien Potencier
Performance @antonioperic
Performance @antonioperic Fabien Potencier
Updating to Symfony ● It is possible, not even to complex ● Need a little bit of time ● If you are using Symfony2.x, upgrade first to 3.4 @antonioperic
Symfony 4.1 improvements ● Made csrf_token() useable without forms ● Csv processor for env variables ● Display DotEnv variables in profiler ● Session improvements ● Console improvements ● Workflow improvements ● Messenger component https://symfony.com/blog/symfony-4-1-curated-new- features @antonioperic
Roadmap @antonioperic
7 months later ● It is great feeling to works with Symfony4 ● Seems that Fabien and core team are making great progress moving Symfony forward ● I love Flex ● It is seems much more natural to navigate through new code structure and DX is much better ● Symfony community is awesome @antonioperic
7 months later ● Symfony is great as microframework ● With higher level of abstraction is more better for prototyping and building things fast ● It will be much easier to start, but maybe even harder to master for newbies (symfony2 wasn’t easy to master) @antonioperic
Thank you! @antonioperic
Questions? @antonioperic

Symfony4 - A new way of developing web applications