SensioLabs is proud to organize the fifth edition of the SymfonyCon, the international Symfony conference. This year, to celebrate Symfony, we decided to bring the entire community to Eastern Europe in Romania and discover the beautiful city of Cluj. If you like Symfony and share fun with professionals, this is where you want to be on November!

Thursday 16th November 2017

09:15
21
Keynote
Keynote by Fabien Potencier in Advanced

-

10:25 Decoupling an application with message queues
Talk by David Buchmann in Advanced (1 hour)

Quick response times are crucial. Time consuming tasks triggered in web requests should be executed asynchronously, if at all possible. In this talk I will give a short overview of what message queues are and then show a case study how we split up an application into smaller services and how we use message queues to coordinate the services.

Keep calm and update your Symfony app!
Talk by Adrian Caliman in Beginner (1 hour)

The talk will present a real life case study of how we upgraded an enterprise application from Symfony 2.7 running PHP 5.6 to Symfony 3.2 and PHP 7.1. We will go through what was the conceived plan and what were the biggest challenges. It will be separated in 3 chapters: upgrading PHP, upgrading Symfony and achieved benefits. In the first chapter we will take a look in upgrading the PHP version and related packages, how we fixed common backward incompatible changes and what parts of our code we updated to take advantage of the new features. Also, a glimpse into what helpful tools can be used ( php7cc, phan, PhpStorm PHP 7 Compatibility Inspection). In the second chapter we discuss about upgrading from Symfony 2 and related bundles to Symfony 3, updating to the new directory structure and making code deprecation free. As in the first chapter, we will also talk about helpful tools for this step. We will wrap it up with a look on the end result and what are the achieved improvements.

5
Optimizing for PHP 7 - the example of Symfony
Talk by julien pauli in PHP

Symfony keeps evolving adding new features, fixing bugs and reorganizing its structure to support more and more projects. But Symfony also evolves in term of performances. This talks will detail how the PHP 7 engine works, how memory and CPU are used in the heart of PHP, how classes, objects, variables and arrays work. Then we'll see how Symfony got patched to take care of the latest optimizations brought to the PHP engine. We'll dive into OPCache, into the memory manager and the internals of PHP 7 to notice why Symfony's code has been patched in such ways that it now performs better.

11:15
9
Workflow in real life
Talk by Artem Dekhtyar in Advanced

In this report, I would like to talk about the integration of Symfony Workflow component, its practical use, problems and advantages of its use by the example of a corporate trouble ticket system for telecom operators. The report highlights such topics as: 1. Security - using Expression Language to control transitions. 2. Data validation - switching the entities by places is not interesting without entering additional data it validation and handling. 3. Coupling Workflow component with Tactician (by PHP League) to separate transition handling and postprocessing in small reusable classes. 4. Developing abstract factory which is elegant way to create symfony forms and command for Tactian depending on the requested transition. 5. Examples of real cases.

From Legacy to Symfony
Talk by Sebastian Grodzicki in Beginner (40 minutes)

How can one use Symfony 4.0 and PHP 7.2 while working with a legacy application? Starting new projects on latest technology is a no-brainer but how often are you in this position? Most of the time it feels like you're stuck with what you have. In this talk I'll share my experience migrating a legacy monolith from 2007 (powering a high traffic social network) and an API-centric web application (running an e-commerce marketplace) to Symfony. Although the talk will be largely technical I'll also share some insights on ROI, non-technical benefits and pitching the idea to your boss.

9
Event Sourcing: The good, the bad and the complicated
Talk by Marco Pivetta in PHP

Event Sourcing is a more frequently heard buzzword, but is it solving all our development problems, or is it introducing new ones? Let's see it in practice! Event Sourcing can look like an attractive solution for any of your applications, but does it actually pay off? What if it is all just buzzwords and no gain? We’ll look at how we implemented event sourcing in our own app, code-reviews.io: what made us fast; what made us super slow; what made us cry. This talk will give you a good idea of what kind of challenges you will encounter when approaching event sourcing for the first time.

13:30 What we learned by merging two big Symfony based applications
Talk by Ivo Lukač in Advanced (1 hour)

Due to complex web projects we work on, there was a need for deeper integration between content management system and eCommerce solution. As eZ Platform is based on Symfony we searched for a Symfony based ecommerce solution and found Sylius as the best choice. We combined the two systems in one Symfony instance so we can integrate on much deeper level. Learn about our experience with merging and maintaining such a solution.

Building your translation process
Talk by Tobias Nyholm in Beginner (1 hour)

The Translator component is the one you learned how to use in 5 minutes and you have not thought much about it since. It just sits there in almost every project and just works. That is great, that is what a great component should do. The tricky part is how you build your development processes to work together with the translation process. You will start to notice problems when you have 4 or more languages. What other tools and services should you use? And how do you teach external translators to edit xliff files? Of course your should not force XML on non-developers. Taking the experiences learned from JMSTranslationBundle, Happyr’s translation bundles and the PHP-Translation organization; I will give you example of a few very concrete processes working with translations in a Symfony environment.

5
Neo4j + PHP = <3
Talk by Michelle Sanver in PHP

Traditional relational databases — ironically — are not that good at the complex relationships some modern applications need. Multiple joins and complex sub-queries can gradually take a toll on performance. Graph Databases, on the other hand, are all about relationships. In this talk we will look at using the popular Neo4j graph database with PHP to build efficient relational data for OmNomHub: not your average recipe site.

14:20 A Journey from Hexagonal Architecture to Event Sourcing
Talk by Carlos Buenosvinos in Advanced (1 hour)

Event-based architectures such as Event Sourcing provide multiple benefits: scalability, complexity management, auditing, etc. However, let’s face it, getting there is quite hard. We lack skills, expertise and courage. In this talk, I’m going to show you some tips and tricks to painless evolve your current architecture towards Event Sourcing, one small step at a time. We’ll start from an Hexagonal Architecture application and we’ll end up in the Event Sourcing doors. The path that we’ll follow is: - Hexagonal Architecture - Hexagonal Architecture with Domain Events - Stepping Stone Architecture (CQRS without Event Sourcing) - Event Sourcing Talk level: Intermediate to Expert Requirements: Basic concepts of Hexagonal Architecture (Entities, Repositories, Application Services, etc.)

Building a cloud-friendly application
Talk by Larry Garfield in Beginner (40 minutes)

The days of hand-crafted artisanal servers are long over. Modern web applications need to be able to run on many different servers without code changes. Not just different hosting providers, but different environments on the same hosting provider. Whether you're using a legacy dev/stage/prod setup or a modern branch-is-environment host, modern hosting imposes some requirements on your application design but also offers a huge potential for new and powerful tools. In this session, we'll explore some key guidelines for building a cloud-friendly application, as well as look at some architectural options that a modern hosting platform like SensioCloud enables.

7
Trend analysis and machine learning in PHP
Talk by Michael Cullum in PHP

The world we live in is one where data is one of the most valuable assets. There are many different pieces of data we can analyse on all kind of data from analytics of user behaviour of your platform, user generated content, monitoring of exception rates, or when your core business model is to provide some kind of analytics platform. This talk will talk about how you can, in your Symfony applications, perform some simple trend analysis techniques to build models, analyse data to get useful information and spot anomalies.

15:10 A GraphQL API: from hype to production
Talk by Aurélien David in Advanced (1 hour)

This talk will not offer you the ever-lasting debate between REST and GraphQL but intends to show you some real stuff. Increasingly used by web giants like Facebook, GitHub, Pinterest, or Shopify, GraphQL has attracted my curiosity, up to the point to make me use it in production. This conference aims to detail the different problems that I encountered while implementing GraphQL, and give you a description of what it is possible to obtain (we speak of schema). We’ll also discuss the new queries paradigm : giving the client the ability to ask for exactly what one needs, including sorting, pagination without puting aside security. Eventually, we’ll explore the new way of writing data using mutations, while maintaining good performance with application cache.

Making the most out of Symfony Forms
Talk by Mihai Nica in Beginner (30 minutes)

All web applications have forms, either simple or complex. This talk will address some of the complex scenarios with forms that change depending on the data entered and have dynamically generated fields (server and client side). Using form events and taking advantage of the form rendering flexibility can create some impressive results. The examples are based on real-life scenarios I have encountered in the five years of using the Symfony Framework.

Discovering and solving performance issues
Talk by Denis Brumann in PHP (1 hour)

Over the last few years I mostly worked with legacy PHP applications and one thing that comes up in each project is performance. Unfortunately more often than not discussion around performance issues are purely hypothetical or around micro-optimizations or the collected data is misinterpreted. In my talk I want to lay out how to effectively anticipate, identify and mitigate performance issues in a Symfony application. I want to discuss how to approach performance optimizations including micro-optimizations, some tools available to a developer for investigating and monitoring performance issues as well as some ways to improve performance, including a quick introduction to both application and HTTP-caching.

16:55 Lessons learned building the Composer internals
Keynote by Jordi Boggiano in Advanced (1 hour)

This session will dive into Composer's guts to see which choices we made worked and which ones did not. After six years and a few hundred thousand users, the Composer code has been through many iterations, problems and successes. Let's have a retrospective to see what we can learn from it.

Friday 17th November 2017

09:00
15
PHP 7 and beyond: 7.2+
Keynote by Sara Golemon

Still desperately clinging to your PHP 5 installation? We'll take a look into the latest offerings of PHP 7 from raw performance, to exciting new language features bringing developer efficiency to a higher level. With the next release of PHP a mere two weeks away, now is the time to take the plunge and never look back.

10:10 Mastering regex incantations
Talk by Tomasz Kowalczyk in Advanced (1 hour)

Regular Expressions are one of the most powerful tools for every engineer in the IT industry. Though their reputation suffers from being misused or misunderstood, they still provide vast amounts of power coming from the theory behind them. In this talk, I will provide not only the necessary knowledge to understand how they work and what powers they bring to the table but I'll also explain some of the "arcane incantations", ie. some of the very powerful but hardly known RegEx constructs.

Webpack Encore - Pro JavaScript and CSS for Everyone
Talk by Ryan Weaver in Beginner (1 hour)

Ready to write an amazing front-end for your app? There are *so* many great tools, like React, Vue.js, module loaders, Sass, LESS, PostCSS and more. But, they all have one thing in common: you need to configure a *build* system before you write a single line of code! Thankfully, there's Webpack: the leading tool for processing & bundling your JavaScript and CSS. There's just one problem: configuring Webpack is tough and requires a lot of Webpack-specific knowledge. Say hello to Webpack Encore: a library built by Symfony to quickly bootstrap a sophisticated asset setup, complete with minification, SASS processing, automatic versioning, Babel support and *everything* you need to start writing great JavaScript quickly. In this talk, we'll also learn about using JavaScript modules, how to bootstrap a framework (like React) and other important modern practices. Give your assets a huge boost with Webpack Encore!

5
UnConference track - Eeek. My tests are mutating
Talk by Lander Vanderstraeten in PHP (25 minutes)

UnConference track

10:35
1
UnConference track - Simplify your application with a command bus
Talk by in PHP (25 minutes)

UnConference track

10:55
2
UnConference track - PHX - PHP syntax extension framework
Talk by Pascal Münst in PHP (25 minutes)

UnConference track

11:05 Auditing Symfony apps
Talk by Lenard Palko in Advanced (40 minutes)

Often clients already have a working product that they want to improve. In these cases starting to work on the project right away may turn into a development nightmare. Therefore assessing the technical status of the product is very important. Depending on the needs of the client this can be done from several points of view : technical standards, maintainability, performance, security, etc. This talk is going to cover how can you prepare an audit of a Symfony application, what should you look out for and how can the result of the audit impact further development on the project. I will talk also about what I found to be the best tools for the job and how can you get clients to see the benefits of it.

API Platform and Symfony
Talk by Kévin Dunglas in Beginner (1 hour)

We'll start by creating a fully-featured API in just a few minutes with API Platform, Symfony and Doctrine. The API will support pagination, data validation, access control, relation embedding, filters and error handling. It will expose many formats (JSON-LD, Hydra, JSONAPI, HAL, JSON, XML, YAML and CSV), will be documented with Swagger/OpenAPI and will have a nice UI done in React. Last but not least, the API will respond in a just few milliseconds thanks to its builtin invalidation based cache mechanism. Then, we will use the ReactJS tools provided by the API Platform to consume the exposed Hydra documentation. In a few more minutes, we will get a Material Design administration interface (a la Sonata / EasyAdmin - but 100% client-side) built with React. Finally, we'll discover 2 nice code generators to bootstrap a SPA (React, Redux and React Router) and iOS and Android mobile apps (React Native).

11:20 UnConference track - Sulu: Tired of fixing your CMS instead of building great applications
Talk by Johannes Wachter in PHP (25 minutes)

UnConference track

13:15
4
UnConference track - Diversity in the Symfony community
Talk by Lukas Kahwe Smith in PHP (40 minutes)

UnConference track

13:30 Dependency Injection Component v4.0
Talk by Nicolas Grekas in Advanced (40 minutes)

The Dependency Injection component is one of the central pieces of any Symfony applications since version 2.0. Starting this winter, it has gained many new features that were needed to build the new Symfony 4 experience around Flex. While used extensively in core, can you leverage them in your own apps? Can you create a lazy iterator in Yaml? A scoped service locator? Configure auto-configuration? During this talk, I'll tell you about the new tags, interfaces or annotations that allow building powerful services. The goal: making your apps always more expressive, thus maintainable.

Building an Open-Source Campaign Platform for the new President of France
Talk by Hugo Hamon in Beginner (1 hour)

This case study will take you to the technical backdrop of Emmanuel Macron's victorious campaign in the French presidential elections of 2017. We will reveal how the En-Marche and SensioLabs teams worked closely together to develop a collaborative, Open-Source and citizen platform with PHP 7 and Symfony to structure the movement. In addition to the technical and political issues involved in this project, we'll present solutions such as continuous deployment with Docker under Kubernetes, continuous integration with Circle CI, SCRUM and Kanban project management, use of Rabbitmq, Symfony 3 new features, and more. We'll demonstrate the importance of choosing these solutions to meet the agility and scalability needs of the highlights of the campaign.

13:55
0
UnConference track - ChubbyPHP - How to use a simple serializer
Talk by Dominik Zogg in PHP (25 minutes)

UnConference track

14:20
9
Doctrine Performance Optimization
Talk by Anna Filina in Advanced

Is your Doctrine too slow or using too many resources on the server? In this presentation, you will learn the memory, I/O and CPU usage of different approaches. You will also see learn how to create proofs of concept and benchmarks to make a decision based on science instead of your gut feeling. I will even show you how to automate your performance testing.

Symfony at OpenSky
Talk by Pablo Godel in Beginner (1 hour)

OpenSky is one of the first large ecommerce platforms to use Symfony2. The whole marketplace has been running on Symfony for many years. Over this talk we will share: - how we use the framework and other PHP components - our deployment process - using Doctrine with MySQL and MongoDB - things we learned to avoid - running a large PHPUnit test suite - And more interesting tips on how our team operates with a large code base with a fully remote operation with teams across multiple continents.

3
UnConference track - Lets talk about Sylius and ecommerce with Symfony components
Talk by Gabi Udrescu in PHP (25 minutes)

UnConference track

14:45
1
UnConference track - Symfony Development Environment Automation
Talk by Cosmin Romeo TANASE in PHP (20 minutes)

UnConference track

15:30 A year of Symfony
Keynote by Sarah Khalil in Advanced (1 hour)

A lot happened! 52 blog posts to help you keep up with all new things, a looooot of pull requests, 2 new versions out… Well I'm sure you missed something. Let's review what happened during last year: basically we'll see and/or discover nice new features that appeared since the last year.