Thank you for coming. The room is crowded. Thank you so much for coming today to the symphony track So I'm starting the day with a tour of, you know, the symphony components Don't miss in the afternoon. They are much more interesting talks and They are going to go into much deeper details about their components that components especially with the ones that Drupal uses internally So First hello, I'm Nicolae Grecas. I'm working in Paris France for social apps. I do PHP since years Involved in open source since yours also since the beginning in fact And that's how I ended up being a you know a core team member in symphony I just started working on symphony three years ago And so I did some commit and nobody told me to stop so I continued And it ended up, you know, I'm going good and well At sensual apps my paid job because you know open source contributor is not something that gets more much money I work for black fire. So black for is a PHP profiler which makes you gives you Colgraphs and views visualization data about how your application behaves So if you don't know it if you didn't try it because it's free also It's very fun to use you can zoom in the core graph you can spot bottlenecks and you can have much deeper Insights into your application. It works with Drupal, of course and with any PHP application So what is symphony Symphony is the reason you had to wait five years to have Drupal 8 wait. Okay. No Not exactly. So symphony gave you Maybe object oriented programming. So it's a big paradigm shift for the Drupal community and We are sure it's a good choice. I think now that Drupal 8 is here since few years you might start and Understand and get the point about the benefits you get with that. So I'm symphony is really a collection of PHP libraries just you know, you can think of each library each component as This folder and in this folder. There are just files PHP files and each file is usually a class and That's it each folder.  I just Souls together a problem and you can think of them about, you know, as many standalone and independent libraries. So if you want to take only two of them, you can do that and If you want to use the full stack framework, which is something also we call symphony, but From the core team point of view, this is not what matters most, you know, the full stack experience We are really happy to work on standalone components and have Drupal or many other open source project use them Just some of them so they do, you know, they cherry-picked the one they fit their problems so Because we have many components and because the core team has some processes I'm going to talk you about I'm very happy to share with you this number. So it's a vanity metric One billion download has content or counted on packages, which is the only contour we have To I know count downloads in the PHP world when people use Composer It doesn't mean anything. In fact, how did we achieve and reach this number which we cheated? Really so why so this is the list of the most downloaded components and this is a real if you go on symphony.com slash stats slash downloads You'll see this live counter. So I took the screenshot this morning We have almost one million downloads of you know components every day Which is nice and these are the most downloaded components So the first one is the event dispatcher, which you are using when you're using Drupal the console one YAML You are also using YAML the polyfill and besturing is something you nobody should care about but it's still very Useful for people that want portability, you know, so that your Drupal works on every PHP system And so on so yes, we cheated but okay That's still nice to be to have something to celebrate and to cut a cake together Okay, so Drupal uses 100% of this no, that's not true 80 either So most of them maybe not so yeah, okay the real number is half of them, which means Okay, you already have many components about 25 components inside Drupal and Which means also that you have the other half Not just sitting there waiting for you to you know Enable them and Download install and use them because maybe they fit a problem that you have and you might be solving already using your own code But better use you know code that other people maintain so that you I don't have to you know to pay And to have to take time to maintain that so that's What we're going to to see together And so how many of the 26 component? Inside Drupal are you using because of course Drupal uses them and of course the core architecture is based on you know HTTP Foundation, which is really the core symphony component that Deals with the HTTP request so everything is based around that in your Drupal 8 code But maybe for you it's just hidden and you're just you know using that and it's really fine but still by knowing how to you know use them directly you may you might get more power and have more power in your hand and Do more interesting things it's up to you So where do they sit so the vendor or directory is where? dependencies are found in Drupal but in many PHP project in fact, so if you you can list them just like that so Ls vendor or symphony and this is the list you might get So There's another one which is twig also I didn't talk about twig because it doesn't start with symphony But it's still maintained by the symphony you know team community so twig is kind of Symphony components, but it's just label twig and it works without any other component and in this case of Of course, all of them are kind of again standalone So if you want to have a project without Dread or Drupal or without anything you can just select the event dispatcher and deal with events with that components and Be done with that so okay Symphony and composer so who is using composer right now? Okay, cool. So, you know a bit about it Composer Okay, is the package manager of PHP of the PHP world. It's the de facto standard that we're using Composer is you know, okay. This is Jordy who is doing the same as his logo Jordy he's the co-maintenor with this Adam and a man of Composer and so Thanks to them So composer has two main jobs one of them is figuring out a list of packages and of Libraries to install that you need in your directory in your application So it means you have a compositor doesn't file where you state what you need and then composer will look at that and recursively Find out the list of you know dependencies you need so it does that that's computing that's downloading Zipper kives and zipping them and putting them in the vendor directories That's one part of the job and when this job is done You just have this one of directory that is full of just PHP classes PHP files at the beginning and mostly PHP classes So they are just waiting for you to use them the second part of Composer is the auto loader system. So Composer ships and installs Not all order which is a piece the PHP class that is the first class and the first file in fact that you include in your Project and this makes available all the classes that are installed in the vendor directory and that's it Then it's up to you to wire that together and to have everything, you know create some experience for your users and for Development and added features then so Composer is also of course a command line tool. So You can use it to list the dependencies. So instead of using LS like in the previous screen. You can use composer show and this will just list you the dependencies you have and The version of them. So this is a screenshot of The dependencies of Drupal 8 so again like before so now we see that It's an 8 of 3. I think Drupal 8 of 3. We have 2.8 versions of all symphony components Except the dump crawler for some reason You have to know that the current version of symphony is 3.3 and we are About to release in two months to the 4 and 4.0 So 8.4 Drupal this time 8.4 is already using many components in version 3.2 There are new new components that came to 3.3 and that are coming to 3.4 And you can use them even if Drupal uses, you know Old and stable components, of course, you cannot use let's say HTTP kernel Which should be in the list. Yeah, because if Drupal needs these 2.8 You cannot use features that are in 3.3 because that would conflict with Drupal itself But still you can install more components and in newer versions So you have more features and you don't have to wait for Drupal to use the latest symphony versions because you know That's just an element components so Let's start with a few of them Symphony debug. Who knows about it? Okay, so symphony debug is already in the list If we get the list was huge so it was hard to look at and to get everything but symphony debug is a component that is Catching errors and trying to get the most out of them so that you can have a better developer experience The bad thing in Drupal is that it's not enabled by default and the good thing is that you can enable it Just in one line. Let's try it. So let's take an example. This is okay a block Something else. Okay, any any application you'd like to write in Drupal and who can spot the mistake the others mistake in this screen Can anybody it's how to figure out? Yeah Yes, so we are missing the backslash Drupal So this is going to fail of course because we are in a namespace and so Fortunately Drupal is displaying, you know helpful error pages and okay, just refresh the screen and get that Okay, no, you can do better You can enable you know logging and things like that so you can get this page and Okay, it's a bit raw still you have the details and you can okay read about that Maybe you know this page you can do better because if you do that in your site slash default slash settings that PHP you can just type debug enable and Debug enable will do several things one of them is install an error and exception handler so that the component will take care of displaying a page that Is as useful as possible for you It does something else it wraps the auto loader. So there's something which is called debug class loader, which is installed in the auto loading system when you do that and then it will catch You know typos so whenever you do some case mismatch typo in your classes This will spot it and you won't have you know to wait for production because okay We created that because we made the mistake of you know developing on Mac That's not a mistake, but the mistake is after the mistake is you start Developing on Mac and Mac has a case insensitive file system So you can miss typos where an uppercase later is in lower case in the code and not in the file system And so on so then everything works because it's case insensitive like on windows and then you deploy to production and just it's broken Is broken because on Linux it's a case sensitive So this will just catch the error before so during development it will do runtime checks and it will tell you okay No, no in this file. There is a typo. You need to fix that So it's free use it So this is the kind of page that you might see if you do debug enable So there are some fancy CSS, but it's still very raw because we are low-level and we don't want we can't have assets because there is no You know a server there when we cannot load images because we don't know if we have any in server to to request These two but you can see that if you have eggs the bug and tooling and you can get the details of the arguments We are improving this page also a lot. So still better With succession succession. So if you do a typo, did you forget to use statements? That may be the hint that will help you save a few minutes debugging that mistake Okay, so that's fixed done Okay, wait This was and this is already installed so Composer I'm going to be quick on that because most of you raised their hands But composer is binary kind of binary package. So it's written in PHP but it's usually if you follow this step up installation steps, it's You know packaged packaged as a far file pH air for AR and so this is a zip that PHP can execute and Then okay, you just ran composer on the command line. You should install it if you don't have it It's really helpful if you're working with a command line Which is really helpful. So if you look at the root composer file of Drupal you'll find this so there is no symphony thing there It's still you Composer JSON files so you can patch it. You don't have to keep it, you know Unmodified it's your composite JSON file That's what we are going to talk about adding more things there How does it work? So Drupal is using, you know, these two plug-in system That's allowed to have composer JSON files in nest nested in directories. So that's how core Ships its own composer JSON file and that's how you can create your own composer JSON files in your models so then these plugins will look recursively in your application and They will add dependencies to the list of things to you know resolve and to be make available for you And so you'll find this one for example, and this is where the list is so core Composer JSON so you see the symphony components and you see also twig slash twig and of course these symphony components some of them have you know Dependencies themselves. So this is how the list gets to 26 about so to Use symphony Slash debug you do not need to do that because it's already there But if you were to need symphony debug in some other application not Drupal You can do that. You can do composer require a symphony debug Let's take the version. So now it would be 3.3 but to be compatible with Drupal We are we need to to use 2.8 and then Composer with will do its magic and Okay, there's nothing to install if you do that on Drupal still Composer added this to the list and it's fine Okay. Yeah, just a sign up about composer. You don't need a new project to use composer It's something that is really easy to add to an existing application So if you have an application that doesn't use composer and that is in the you know the old style way Then you can still very easily add it To your application. So you do composer in it This will create a JSON file for you and then composer require this will add things in the vendor directory Then it's just up to you to enable that and to add some require vendor slash auto load PHP, which is the entry point of Composer dependencies if you need to move forward and to migrate a legacy project to some, you know Composer packages, that's really easy and you don't have to do it the old way Okay, another one symphony finder And the finder is Helper to Discover files of the file system Let's take an example. Let's say for some reason for whatever reason in fact you'd like to look for every templates and nested in any core slash themes Directory, this is how you can do that. So you create a new finder You look for files in this Drupal root core theme star templates directory for names for files that end up And that match the star the twig so every twig files that have a size that is higher than one kilobyte And then you solve by name. So very easily this way you configure how to get a list of files This is reclusive. You can put maximum Nesting limits you can look for directories you can look for Anything really you can think about and then you can just display this list of items So it's an iterator it implements the iterator interface. So you can for each and Get the files one by one and discover that So, okay. Well, what is file? Let's mix things together. So what kind of object or Type is file. Is it a string? Is it some object yet? I didn't tell you so maybe you don't know So let's discover that together Before yeah before just to tell you the finder works with any stream wrapper really that PHP can handle so this is a core system in PHP in the PHP engine Where okay PHP ships with a list of stream wrappers that are already there one of them is FTP another one is HTTP HTTPS So there is a short list of them and you can create your own. So if you'd like you can do foo colon slash slash and then you want you can put anything there So it's a virtual file system bundled into PHP and this just works fine with a finder Also, so if you want to list remote files with FTP you can do that You can add password using the URL and so on Okay, so back to our issue to our problem So let's use now symphony var dumper who is using and who knows about symphony var dumper already Cool. So there is a model which is called var dumper model and This is a packaging van symphony var dumper for Drupal, so maybe you should use it you'll tell me at the end if you liked it So symphony var dumper is like Kind so who is using kins? Okay, so it's Library that knows everything about the type system of PHP, you know, it can deal with recursive things and Complex data structures, but also of course very simple ones so that you can then see See the state of your variables and of your objects and inspect so it's debunked by debunking tool again That's why we're going to use it to you know, know the type of this file variable So back to this We added composer require symphony var dumper and now we have a dump function. So dump is a plain rope flat PHP function that the component creates It's not very common to create functions at least in the object oriented World but this is only a debugging tool So you need to you know have things work quite easily and in the larval world they use DD Or just D maybe so it's even shorter to type and it was the same way So you should never commit dump in your file if you work with it, which I hope you do So what's the output of this? This will display you this kind of output So this is in HTML so we can toggle the SPL file for so now we know the type of this thing It can it's the SPL file file info, which is a type from the you know PHP SPL library which is bundled into PHP and then it will just show you the state of this object The nice thing is that okay. There's this toggle thing which is nice It will It's able also to add, you know more properties that are things that are not inside You know real properties of the object So in this case we have the first two rows and whites relative path and relative path name which are private variables I know that because the minus Means private and then we have these purple properties Which are not in the object There are you know virtual properties that are just useful for debugging so that you can read them and the way You access this Information from the SPL file info object is by calling getters You know you can do get m time get extension gets real path get file path and so on get finally in fact So we know and the volume per component knows about a lot of different kind of you know objects internal ones like this one and also Specific ones you know like the symphony container which is the one you're using when you're using using Drupal So it knows about doctrine if you're using doctrine the entity manager It knows about daytime objects which needs special care when you know you want to debug this kind of object So the community is working hard and providing you We call that caster which are you know code that knows about a Great variety of types in PHP and provides nice visualization. So really that I use it every day So now we know the type so let's type in with PHP doc which will hint you And hint PHP storm which is who is using PHP storm? Okay, nice. So I'm sure you know about it So now we can use that object. So we have file and we can call get file name on it We can Use it to display and let's just print the list of files So this can be the kind of output you might get if you you know package that in some HTML Okay, nice. So now we have the twig files in core Okay, let's do that in the console now. So let's play a bit with the symphony console Symphony console is the second most downloaded components Standalone components. So many project are using just symphony console without Drupal without all the symphony components they just need to create a console commands and This provides everything to pass, you know, the command line arguments and to provide fancy outputs So if you want to do that, it's very easy In the afternoon, there was talk by Jesus Manuel Olivas who is you're talking about Drupal console and Drupal console Is built on top of that So let's take an example This is common PHP. This is not Drupal in any way. This is just a common PHP file that You can just open you can copy pass the code. So every single, you know PHP Application using composer should start with this require Vendor autoload because that's how we get the classes and the actual implementations there and then we have this Application the namespace is missing, but you have the application object that you can create then you can declare What you accept as arguments? So great name yield and you have can wire some code So here it's a closer and the closer sales. Okay Hey name So you can just run that and say PHP run this file command that's PHP grids, which is the name of the command and Ryan and Can say hey Ryan and if you add the argument the yell arguments. Hey Ryan in all caps So yeah, okay, just the important part you can just register Name so that's great on the previous screen. The name is the argument So the thing that comes after grids and then there is this Dash dash yell which is an option. It's not an argument. There's a name a label. So just declaring that you can then Reference them in the body. So we see input Get argument name and this will provide you what was on the command line and get option Is it there or not? Then if it is we have these str to erper to yell at you Cool. So the command component the console component comes with You know cookies. So this is one of them. You can type just PHP comment and not add any Argument and then it will by default provide you a list and And helper. So this is just telling you okay, you can add dash H to get some help and you can also call grit Which is listed there, but there are two bundled comments which are help this one and list to list all the comments Here it would be just displaying grids So that's okay. What makes things easy and you don't need to build that yourself So let's do The same comment than we did before to mix concept and things together. So now let's create these templates find Common let's add an argument, which is the directory to look for templates and let's create a call inside So we take the code from previous screen and we put it there. So We have a finder. Let's create a finder look for files in this get argument directory. So now it's just a variable and we can iterate over the finder and Display the outputs. So as you can see and in this screenshot I'd like also to show you that that there is this, you know tax XML like tax and this is the way to add colors to the output So just say saying this is a comment and this is info then there is a style Which is there's a symphony style by default, but you can tweak and create your own style and with a style You'll get colors for that and you'll get nice output like this one cool in a few lines, we just created that and so easy Okay, there is more on symphony console you can do more things because of course You know console is not just drawing line drawing, you know raw output and lines. So we can do better. We can Kind of create a UI so we can in this case It's a table because you know we're listing files and the size of every every file So it really it's a table in HTML. We would use a table or we could use a table. So There's an helper for that you can create a new table and You can add the headers so file and size which are the two columns we need and then you can iterate over the finder and add rows one by one with this add row and Method and call okay in the first row. We add the command and the second row. We have the info Okay, and okay, there is another thing there in this screen. So we'll you'll see the output in the next screen But I didn't find any other example. So let's add a progress bar just for fun of it of course if you have a long running process and you want a progress bar, so you have a Way to make people wait For the output you can create that so create you create also a progress bar and Let's do some computing. So in this case, it's the slip which is very hard to compute and it will take time that's the most important feature of it and let's advance at every iteration and This is what you'll get for free again a few lines of code you wait for the slip to you know wake up and Nice now you have a table Again just a few lines of code We are in Drupal so Drupal con let's mix that with Drupal you can do that so In Drupal there is this Brute and low-level object, which is the Drupal kernel if you open the index of PHP file It's one of the first object if not the first that is created when running PHP and you can do the same in the command so so let's create a command some DP process and We can get and create the Drupal kernel there a production one and We can okay handle the request if you want, but we can also get the container So the container is this object that is internal to Drupal and that knows about all the services you have in your application So there's a big list bundle in Drupal of services You can use one of them is the database So you can container get database and this will return you and create for you the database object And then you can use the database as you do usually so you let's query and show tables and let's dump So in this case we are in the command line and you can dump the command line So dump and var dumper will detect automatic for automatically for you if you're using the browser So HTML javascript fancy things if not it will just display you Things on screen. So that's the output It looks exactly the same as before it's the same color scheme and now it's in the console and it tells you that if you do Some you know database query you get the Drupal code database statements And then there is some state inside one of them is a query in the web profiler query log And so on so you can discover also with using dump you can discover How Drupal works internally just looking at the data structures they use Cool, of course the common example Is just the entry point it's up to you then to be creative and to fill the need you have there another one Symphony file system Symphony file system is a boring class just you know one single class. It's a one class component And it just provides you helpers to do things with a file system. Yeah, really. It's boring It's not a file system abstraction layer. So who knows about fly system Okay, so there is a package which is called fly system which has an object which Creates a virtual file system in PHP. It's not stream wrappers. It's something else So then you can create file system virtual ones But have a back end that is you know an s3 or an ftp And you don't care because you just use that object as a file system and it provides you Abstraction this is not what file system provides file system is just about you know Creating a directory this M key dear and then of course if you want to do that In PHP in raw PHP then you have to deal with recursivity You have to deal with errors because dealing with errors with a file system API the PHP API is just you know Triggering warnings and so it's complex to deal with so this knows about these specificities and makes everything easier for you So you will get clean exceptions and you'll get by default to the if you want to mirror a Directory to another one you don't have to do the boring work of you know recursively going into all of them and copying them one by one Which is what this mirror method does You can mix again things so let's use the file system And let's use the finder all together. So the CH mode so to change the permission of the file of Many many files in fact takes an iterator as arguments And then you can use a finder to so you create a finder and you look for files in this directory for Files that you know start with block and Done you changed the mode of All these block files in this directory So that's the power of having in those standalone components There is no coupling there, but if you use them together you have much more power at your hand Another one a symphony process So symphony process Just replaces shell exec pass through the back tick You know operators in PHP which you can use and which it uses internally It uses proc open in fact and but it abstracts out all the complex things because dealing with sub processes In PHP, but in every language is something that is hard with a lot of edge cases So this does the job for you. It provides you way to you know call a common. So and also to be safe so this is Creating a cost a who knows cost a what does cost I do Who knows that? Okay, so it's be is going to be a surprise for everyone else But okay, so we have this cost a command and we give it an argument and This process object takes an array and it will take care of for you Of you know escaping the arguments because this is like in sequel. You know, you have a sequel injection In this case, we have the same issue We have you know shell injection that potentially could happen if you are not careful enough So this will do the job for you if you provide arguments common lines arguments in this array And the constructor and you provide them one by one and escaped then the process class will do Escaping for you and escaping is something really hard because you know on windows on Linux and Mac It's not the same So this will just do it you can forget about what I just said if you want to have this process have a timeout five seconds, so if the new is lasting for too long you can just kill the code and so you can start the process and You can run it In the background, which is what this example is about but you when you do starts it just starts It's non-blocking code and then you can you know do other things while it's running and of course you can also just process run and this will block and wait for the Output and for the end of the process So of course at the end you can check if it's successful You can get the error output and you can get the output and so on so I use always that again It's just one single standalone library that does its job very well and In a secure way, which is again very hard. So that's the output So cosay is a fancy thing that just takes what you want to it's an echo with a code that echoes Okay, another one a symphony lock the symphony lock is not released. Yes yet in a stable version It's being released in two months in three to four and it allows you to lock I think so locking means blocking concurrent accesses to the same resource The typical use case one typical because of several of them but could be a cron command So let's say you have a periodic task that is that is the that is running in the background And let's say you want that that's to run every five minutes because that's how you want it today to be but if One run of the command for some reason once Takes longer than five minutes then you don't want another process another concurrent common to run also So you could have this common Get a lock and say I'm the only one working now and then five minutes later when the other one is you know waking up It will just look at the lock and say oh another common is still running So I'm not doing anything now or it could be also be waiting for so it could be oh another one is running Let's wait for it to be over. You have the choice. So that's how you can use it There are several backends to create the locks so that in this example It's a complex one, but it's easy in terms of code. This is using a ready store. So it's a remote Backend so if you have a several servers, and if you want them to have a single lock Source you can do that and all the servers that we look for that lock This some dash lock thing They will all be in synchronized and you know Only one of them might do the thing you want to look So okay, so you create the ready store you create factory to create the log You create the logs and the most important lines are at the bottom if lock acquire Which means okay, you are the only one running for this lock Then do stuff and then let's release the lock and don't easy Another one symphony dot and So environment variables environment variables are the new way The it's not that new because you know, it's like in the 17th But it's new for us at least as a practice and Environment variables are the way to configure infrastructure related things The typical example is the database password the database password Should not be stored in the files of your project They should not because that's not your job to know the password of your the database And that's not the job of your code and your job to know where on which IP on on which port The database server is listening So I know that's what we do we configure Drupal we configure, you know, whatever application and We code look there But the best practice is to let the Infrastructure tell you where it is and this is done through environment variables so to do that and to deal with environment variables you need to code your application in special ways, are you especially using, you know this get and Function PHP function, which will do a lookup in the environment and get the variables So this is the kind of thing you can do to be, you know context sensitive and to have auto configuration By the infrastructure the issue there, okay, so that's nice that the starting point But that's not over because then during development You want this code to be unmodified let's say in development You don't have any infrastructure You just have your local machine and you want you know the password So one way could be to just you know Overwrite and replace things in this file, but that's your default file So maybe better not do things there for development So the best practice would be to create this dot and File so that and it's just a file and it's not coming from symphony the dot on file is a concept that exists in other languages and It's something that the shell should be able to run So if you do bash dot on the it will create these variables So better do source because this will create variables in the local Process you can source dot and and this will import the values there as environment variables for the current process So that's one way to do with this file. So no symphony not PHP involved there You can do automatically this for you So to do that you need a parser for this value PHP one and you need to create the environment variable at runtime Which is something that the dot on Component does So again, you can just do that you create a dot on which is the parser for this file you tell it to load this dot on File and done then you have these defaults and they get and will get the value from either the Environments the infrastructure if there is already a variable that has the correct name And if not that on the will fill the holes and provide you the default values or the development values that you put there You should maybe not use that in production in production. It's always better to have real environment variables or fast CGI parameters because you know you can configure engine x to push configuration to your application and this is What we're talking about and the dot of components so that on these even three of three, but you can use it standalone there's no dependency so Maybe I don't know how it's not in a dot for but maybe you can reference environment variables in your services dot yaml files So that's something that's possible in symphony. So there is everything the code is just sitting there it's not in Drupal yet as far as I know and This will create a dynamic container so that you won't have to compile the container again to get a new value there Okay, another one symphony cache Symphony cache is about adding cash to your system to your application The cache is something you know that store pre-computed values and Provides them very fast so that you don't have to re-compute. It works very very very well for You know performance Intensive task and maybe not that intensive so The cache component is about Implementing something which is called PSR 6 which is a PHP standard recommendations So the interface itself is not invented by symphony. It's invented by a standard group The so it's called the PHP feed from a framework interpreter interoperability group Which is a group that created a set of interfaces One of them is cash so you get an item from some store You configured previously you set the value you save it You check if it's easy hit so it was it found in the database or not. You can delete things and so on so Just use that again. It's very easy and standalone. You don't need any help from Drupal and from anything to Use that so okay, so there are several adapters one for a PCU for local caching in database Memcache Redis if you want to use that which is a good idea it does tagging in validation So you can do on your own business object tag based in validation You can do exploration so you can set an item then it will be automatically deleted after let's say five seconds and okay symphony expression language Symphony expansion language is something that you are already using when you're using twig every single expression you're using in twig is an expression language thing and an expression language the component is about Providing you the power of these expression For your own domain. So there's no twig inside. There's only this part. So let's say you want because you know marketing people's and you know your product guys our people want just to have a way to configure things and At some point you might get bored by having you know changing requirements for these kind of details So you can provide them with expression language. You can provide them a Field with a string they can just type so it's kind of they will call that a programming language and So you can allow them to configure this kind of thing So let's say if user group group in a good customer or collaborate collaborator there You'll apply some discount or if some article has more than 100 comments, then it's in and it's not in category Miscellaneous then promote the article to be home page. So that's what they would mean they it's the user side They would express that using this kind of trains and You do the business logic after so yeah, so it's so that's how to use it you create this expression language object, so let's say you have an apple and Then you can just create the language so the expression is there and You can evaluate it's like evil the PHP evil except that it's safe That's the main point of it and it's let's say food or variety and this will return you the variety of the fruit that is passed as a context argument to the Expression which is you know, it's looked like what twig does but it returns only the expression not the string You can also use that in your routing system. It's already possible right now So when you create a route you have this condition entry and then in the condition you have you know the context Object which is which is sitting and you can do context dot get query string and you can check the value its value So load equals one of course you can check anything and any any complex condition under request and use it It's already there in symphony. We the service container allows also to have Expression it's excluded and it's not in the droop or container because it doesn't work this way So it's not possible yet. If you want it, you need to do a poor quest It could be in the future Okay, another one property info that allows you to get you know Details from the type the dog blocks on every single property of any class So if you want to do an API and you want to do reflection on Some class a clever reflection that is able to read dog blocks and so on you can use property info You can use workflow workflow is a component that Provides you way to you know a law or block transitions. So this is a reviewing system where we have states Which we call places draft review rejected published and then you can you know create transitions saying okay? It's possible to go from to review to draft From draft review from a root published and so on and then by defining all the transitions and the states of your workflow So you can think about it as a diagram and the graph you can just check Using this workflow is if some object can be put into, you know, published states or to review states So that's the programmatic way to do workflow. So you have already workflows That's the programmatic side you can use in your own business logic. So this can be done in configuration So we have let's say symphony LDAP symphony. Maybe symphony image is not much yet Maybe symphony tf8. So that's maybe new components. Okay. No Just a few words about them so about the release cycle in symphony release components Every month for bug fixes every six months for new features So minor releases about new features every two years We release a major release a major release is about removing all the deprecated code So the next one is in two months in symphony for and on the ghost security releases Drupal is using now Almost the same process. So that's really fine good because they can you know have New features from symphony regularly and they can drop code at every major release and so on In terms of maintenance it means when a minor version is released. It's usually maintained for eight months We also have long-term supported versions which are available for more so 14 months and No, sorry 36 months for the long-term support releases So the next one is 3.4 and I hope Drupal and I think Drupal will adopt 3.4 very soon because it will allow them to be stable and to build Things on top of all the new features we added there and provide them for you So we have a wish that's why we have these kind of processes Which is to make everything so easy to migrate to migrate from 72 to 3 to 4 it works already because you know They moved Drupal core team moved from 2.8 components to 3.2 now and you didn't notice mostly so cool Looks like we made it possible So to do that we use semantic versionings We use we have a backward compatibility promise. So we Describe the way we don't break compatibility. We have exactly the same policy as Drupal Since a few year more which is triggering Deprecation notices at runtime so that you know and maybe the Drupal core team knows also about you know deprecated path that needs an update and we have also this continuous upgrade path policy, which Is a promise to allow you and to create some path for you to migrate progressively one step at a time So we won't change everything and say okay. See this is symphony for we break everything. Just figure it out yourself We create step-by-step Migration okay, so Drupal is using symphony. Are you using symphony? That's the point you got so that's Drupal models. You can cherry pick anything you want there You also have now 50. Let's say it's 50 the number is just changing because we have bundles components in bridge and so on But let's say 50 symphony components. That's another place where you can find code that might just help you solve your problems and of course you have composer and composer means you have bunch of other components that you can use and yeah, yeah Be creative. So it's up to you now Thank you We have five minutes for question if you have some question We'll be happy or Yeah, yeah, not enough time. Okay. Thank you. If you have questions still you can come to me and can chat