Lisbon 2018 DECEMBER 6-8

Schedule

Thursday, December 6th

  Track Advanced Track Beginner Track PHP
08:00
09:00
Badge pickup and light breakfast
09:00
09:15
Opening / Welcome
09:15
09:55
Keynote
Fabien Potencier
10:05
10:45
Using the Workflow component for e-commerce
Michelle Sanver
Behat Best Practices with Symfony
Ciaran McNulty
File storage for modern PHP applications.
Frank de Jonge
10:45
11:15
Break
11:15
11:55
Symfony Messenger: 6 months already and more to come
Samuel ROZE
Going crazy with HTTP: Caching pages of logged in users
David Buchmann
Changing PHP
Pedro Magalhães
12:00
13:30
Lunch
13:30
14:10
Using Symfony Forms with Rich Domain Models
Christopher Hertel , Christian Flothmann
One year diversity initiative
Lukas Kahwe Smith
How static PHP analyzer changed the way I look at code
Nicole Cordes
14:20
15:00
Building global web apps with multi-region hosting
Jordi Boggiano
Building Apps for Immutable Servers
Daniel Gomes
Bulletproof MongoDB
Jeremy Mikola
15:00
15:30
Break
15:30
16:10
Leverage the power of Symfony components within ApiPlatform
Antoine Bluchet
The patterns behind Doctrine
Denis Brumann
When testing makes no sense
Miro Svrtan
16:20
17:00
JeoPHPardy (game activity)
Jeremy Mikola
18:00
20:00
Social event

Friday, December 7th

  Track Advanced Track Beginner Track PHP
08:00
09:00
Breakfast
09:00
09:40
Microservices gone wrong
Anthony Ferrara
09:50
10:30
Security: handling user access with Symfony the right way
Diana Ungaro Arnos
Modern application built from scratch: API Platform FTW
Anderson Casimiro
Unconference
10:30
11:00
Break
11:00
11:40
My first year with event sourcing (in Symfony)
Tim Huijzers
Symfony 4 internals
Tobias Nyholm
Unconference
11:50
12:30
Lightning talks
12:30
14:00
Lunch
14:00
14:40
TBA
Nicolas Grekas
Webpack Encore: Tips, Tricks, Questions & Best Practices
Ryan Weaver
Unconference
14:50
15:30
Panther: test your Symfony apps with real web browsers
Kévin Dunglas
Profiling your Symfony application
Michael Cullum
Unconference
15:30
16:00
Break
16:00
16:40
A Year of Symfony
Fabien Potencier , Sarah Khalil
16:40
17:00
Closing session

Keynote

Fabien Potencier - English - Keynote - Thursday, 09:15

TBA

Using the Workflow component for e-commerce

Michelle Sanver - English - Track Advanced - Thursday, 10:05

We got the task to make an order API, from open order, to delivered, with payments in between and after. So there are naturally a lot of states, and a lot of transitions where we needed to calculate the prices correctly and handle credit card transfers.

Keeping track of all of this, and when we need to do what, ensuring that an order is always up to date, and that it has the data it needs, and that we send good error messages when a user can not do an action, was a challenge for us until we discovered the workflow component.

This is a real happy use case story where I will show you how we did this, and how much more straightforward it was for us to build an otherwise complex system using the workflow component.

Behat Best Practices with Symfony

Ciaran McNulty - English - Track Beginner - Thursday, 10:05

Behat is widely used as part of a Behaviour Driven Development lifecycle, but it's also widely misused.

In this talk Ciaran will explain the BDD process, and show the best practices for using Behat including: writing good scenarios, driving service development from scenarios, fast UI testing, and using Behat and the Symfony2Extension.

File storage for modern PHP applications.

Frank de Jonge - English - Track PHP - Thursday, 10:05

Many PHP applications need to store files. There are many different reasons to store file, and not all filesystems are created equally. How can we identify our needs? Which filesystem is best for your use-case? How can we ensure our future needs are not blocked by the code we write today? In this talk we'll explore how filesystem abstraction and general coding guidelines can improve our application's and make them future proof!

Symfony Messenger: 6 months already and more to come

Samuel ROZE - English - Track Advanced - Thursday, 11:15

The Messenger component brings asynchronous processing to Symfony: using message bus(es) you are able to decouple your application and route some (or all) of these "messages" to transports such as the built-in AMQP transport. It’s been more than 6 months since we’ve merged the new Messenger component in Symfony. We will explore the different use cases it has been used for so far and how it will continue to involve in order to facilitate even more.

Going crazy with HTTP: Caching pages of logged in users

David Buchmann - English - Track Beginner - Thursday, 11:15

You know how HTTP caching works but need more? In this talk we look into ways to cache personalized content. We will look at Edge Side Includes (ESI) to tailor caching rules of fragments, and at the user context concept to differentiate caches not by individual user but by permission groups. A big help to leverage this concept is the FOSHttpCache in combination with either Varnish or the Symfony HttpCache reverse proxy.

Changing PHP

Pedro Magalhães - English - Track PHP - Thursday, 11:15

PHP releases a new minor version every year. Major versions happen when there are enough changes that justify to do so. Who is making those changes and how does that process work? What is the process to get an RFC to vote and the subsequent merge of the code? How can I make my first contribution? Is there anything I can do even if I don't know C? If you are intrigued by PHP internals, this talk is for you.

Using Symfony Forms with Rich Domain Models

Christopher Hertel , Christian Flothmann - English - Track Advanced - Thursday, 13:30

With the popularisation of DDD people started shifting from anemic models with only getters and setters to a rich model describing the state changes in specific methods. This way of designing models does not play well with Symfony forms. User provided input is inherently invalid while we want to maintain certain invariants in our domain model. A common approach to overcome these limitations is to create data transfer objects our forms are then bound to. This can lead to lots of mapping & glue code that might be cumbersome to write and maintain.

But couldn’t we do better? In this talk we will discuss the different aspects of a rich domain model that makes it hard to use it in conjunction with the Form component. We will then look at the possibilities to hook into the data flow of the form handling and discover how we can modify it to interact seamlessly with our model.

One year diversity initiative

Lukas Kahwe Smith - English - Track Beginner - Thursday, 13:30

Last year in Cluj the diversity initiative was announced by Fabien. This talk aims to give an overview how those efforts were organized, what was done as part of the initiative and what progress was made. Both increasing how welcoming we are to people from all backgrounds as well as community reach out to help grow the Symfony community. Finally we will look at what could be the next steps this initiative.

How static PHP analyzer changed the way I look at code

Nicole Cordes - English - Track PHP - Thursday, 13:30

Let me introduce you to the world of static PHP code analyzers. I'd like to show you which tools exists, how to use them and how they help you to improve your code quality.

Building global web apps with multi-region hosting

Jordi Boggiano - English - Track Advanced - Thursday, 14:20

This session will explore various setups and case studies from my attempts at hosting sites used by global audiences.

There are many ways this can be achieved with different levels of success, budgets and global-ness.

The talk will touch on Terraform, AWS, global DNS resolution and CDNs amongst other things.

Building Apps for Immutable Servers

Daniel Gomes - English - Track Beginner - Thursday, 14:20

Immutable Servers are not new and they are not that simple to achieve. However, the advantages of having Immutable Servers versus Snowflake Servers are worth it.

In this talk, I will explain the differences between Snowflake and Immutable Servers and also what considerations you should have while developing your App. I will also share which tools and strategies you can use to build Immutable Servers.

Bulletproof MongoDB

Jeremy Mikola - English - Track PHP - Thursday, 14:20

An all-too-common approach for database error handling is to log the exception, return a 500 reasponse, and move on to the next request. MongoDB and its PHP driver have an array of features that can greatly improve an application's resiliency in the face of unexpected errors. This talk will examine how the driver monitors connections to a cluster and look at how we can tune its behavior to meet an application's unique needs. We'll also demonstrate how PHP applications can take advantage of newer features such as retryable writes and multi-document transactions to guarantee ACID data integrity without having to fall back to PDO and an SQL database.

Leverage the power of Symfony components within ApiPlatform

Antoine Bluchet - English - Track Advanced - Thursday, 15:30

ApiPlatform is great for building API-first software. Even better, it's build on top of Symfony! Did you hear about Symfony's Workflow component? Or the brand new Messenger component? They offer powerful tools!

For example, a pizza order can take multiple statuses, each one in transition with another (order, pay, wait, eat). This is a workflow.

While waiting for the product, it needs to be cooked! Every time the order is paid, we have to send an instruction to the kitchen. Today, why don't we automatically push that message?

Through a real-life use case, I will demonstrate how well these two fit on top of our Symfony-based API!

The patterns behind Doctrine

Denis Brumann - English - Track Beginner - Thursday, 15:30

How does Doctrine talk to your database? What are Data Mapper, Unit Of Work, and Identity Map? These are the questions I want to answer in this talk. We will look at how Doctrine ORM implements them and what they are there for. Finally we will look at how they compare to Active Record and what the benefits and drawbacks are to help you choose which one fits your needs best.

When testing makes no sense

Miro Svrtan - English - Track PHP - Thursday, 15:30

If you look at the stage of any conference in the PHP world, people are preaching testing,testing,testing ... If you on the other hand look at the community, the percentage of people writing tests is really low.

As a person who went from 'How can I ask for more time/money/resources for testing?' through 'ask for forgiveness instead of permission', to person who writes tests a lot, I still believe testing doesn't make sense. No, it doesnt make sense for all and everyone, often enough it makes no sense for me too.

This talk will explore that fuzzy line when you have to shift your mind from one side to the other: in both directions.

JeoPHPardy (game activity)

Jeremy Mikola - English - Keynote - Thursday, 16:20

The Symfony Form component did not appreciate me leaving this blank.

Microservices gone wrong

Anthony Ferrara - English - Keynote - Friday, 09:00

Microservices are the latest architectural trend to take the PHP community by storm. Is it a good pattern? How can you use it effectively? In this talk, we'll explore real world experience building out a large scale application based around microservices: what worked really well, what didn't work at all, and what we learned along the way. Spoiler alert: we got a lot wrong.

Security: handling user access with Symfony the right way

Diana Ungaro Arnos - English - Track Advanced - Friday, 09:50

We often overlook a central security requirement that any application needs to meet: controlling users' access to data and functionality. Usually, we handle user access through the combination of 3 security mechanisms: authentication, session management and access control. We will take a look at the Symfony's Security component powerful tools and see how to use them to handle user access the right way.

Modern application built from scratch: API Platform FTW

Anderson Casimiro - English - Track Beginner - Friday, 09:50

Scenario: You had an awesome idea. A brand new business. So you have to test it‘s adherence to market… as soon as possible. How?

Fortunately we have Symfony and API Platform. This session will cover main topics to build a real world project on top of REST and GraphQL APIs with modern authentication while delivering clients and documentation. Barely touching PHP code for that.

My first year with event sourcing (in Symfony)

Tim Huijzers - English - Track Advanced - Friday, 11:00

Over the last couple of years, I have heard of Event sourcing but didn't really know where to start until I did a tutorial at DPC '17. After having some basic information it was time to start a Hackathon and after that something production worty. In this talk I will try to give the best information to get started and to know some of the problems you can face if you begin event-sourcing.

Symfony 4 internals

Tobias Nyholm - English - Track Beginner - Friday, 11:00

Symfony is a request and response framework. But what about all that magic that happens around your code? Why isn’t autowring slowing things down? And how is it that Symfony components can be so decoupled but sill play so well together?

I will show you the Symfony internals and its architecture.

This talk will go over the architecture of Symfony. We will follow the request and the response paths throw the framework. We will do some stops at the components that are more awesome than others.

This talk is perfect for you who is working with Symfony or Laravel and want to understand what the framework actually is doing for you.

TBA

Nicolas Grekas - English - Track Advanced - Friday, 14:00

-

Webpack Encore: Tips, Tricks, Questions & Best Practices

Ryan Weaver - English - Track Beginner - Friday, 14:00

With Webpack, your JavaScript & CSS code can have superpowers you've only dreamed up. And with Symfony's Webpack Encore, you can get all of this with almost zero setup time!

In this talk, we'll quickly learn the basics of Webpack Encore, then, turn to the lessons we've learned over the past year: answer popular questions and explore common problems people run into when moving to Encore. We'll also dive into a host of lesser-known best practices that you can follow to make sure your frontend coding is as streamlined as possible. A modern frontend build system: all in the time of one talk!

Panther: test your Symfony apps with real web browsers

Kévin Dunglas - English - Track Advanced - Friday, 14:50

From a few lines of jQuery to modern React/Vue… PWA, Symfony apps always contain JavaScript code. Unfortunately, the SF functional test helper and the Goutte web scrapping lib aren’t able to execute JS code. It means that they cannot assert on client-side generated HTML, test if an element is visible or not, deal with alert boxes or detect if a bug occurs only with a specific browser.

Panther is a brand new e2e testing and web scrapping library written in PHP that drives real browsers thanks to the WebDriver protocol from the W3C. It implements the exact same API than the BrowserKit component. It means that existing SF tests and Goutte scripts work without modification… but this time JS will be executed! The tool also brings new capabilities including taking screenshots or executing custom JS in the execution context of the web page. To install Panther you only have one command to run, and it doesn’t need any dependency to install Panther. Let’s meet the feline!

Profiling your Symfony application

Michael Cullum - English - Track Beginner - Friday, 14:50

A 1 second delay on an e-commerce site can result in a 7% reduction in your conversion rate; but profiling isn't just important in e-commerce when limited resources are available. Profiling is really important and there are now a host of tools to help you profile your application through means other than naive profiling. In this talk we'll look at how to identify bottlenecks in your application using a variety of tools; and how we can use those profiler results to improve our Symfony applications' performance.

A Year of Symfony

Fabien Potencier , Sarah Khalil - English - Keynote - Friday, 16:00

Let's review what happened during the last year: basically we'll see and/or discover nice new features that appeared since the last year.