Drupal 8 module development + useful tips | Gleb Redko | Skillshare

Playback Speed

  • 0.5x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 2x

Drupal 8 module development + useful tips

teacher avatar Gleb Redko, Full-stack web developer

Watch this class and thousands more

Get unlimited access to every class
Taught by industry leaders & working professionals
Topics include illustration, design, photography, and more

Watch this class and thousands more

Get unlimited access to every class
Taught by industry leaders & working professionals
Topics include illustration, design, photography, and more

Lessons in This Class

10 Lessons (1h 33m)
    • 1. Drupal module development: welcome

    • 2. Drupal 8 module development intro

    • 3. Setting up Drupal 8: MAMP & Composer

    • 4. Configuring our instance, setting dev environment

    • 5. Module specification

    • 6. Module development: defining a library and bringing components together

    • 7. Adding block, controller and routing

    • 8. Routing and dependency libs

    • 9. Making our module configurable

    • 10. Useful tips

  • --
  • Beginner level
  • Intermediate level
  • Advanced level
  • All levels
  • Beg/Int level
  • Int/Adv level

Community Generated

The level is determined by a majority opinion of students who have reviewed this class. The teacher's recommendation is shown until at least 5 student responses are collected.





About This Class

This course is right for you if you’d like to learn the basic principles of module development for Drupal 8. In this course, I’m creating a module that takes data from RESTful API as an input and builds an interactive map of railway stations in France. We go through important stages of module development like

  • defining a library
  • creating block
  • controller
  • routing
  • making our module configurable

In the end, I’m gonna share some useful tips (that I use daily on my projects) on how to set up your Drupal 8 instance for smooth and painless development if you plan to continue exploring and developing on Drupal 8.

For the map source code mentioned in the 5th video, Module specification, get it from:


All the code we add during the course is also available on this GitHub repo:


Let's go!

P.S. Check out my Crash Introduction to Web Frameworks 2019

Meet Your Teacher

Teacher Profile Image

Gleb Redko

Full-stack web developer


I'm a full-stack web developer and for the last 4 years I’ve been working at Tallinn University (Estonia) as a developer and lecturer.

I got a BSc degree in Computer Science from Robert Gordon University (Aberdeen, UK).

I create web applications from database design to button colours. Working in a small team of developers at Tallinn University, we produce web apps used by students and teachers all across Europe. Apart from that, I teach Web Frameworks course to our students.

I also had work experience at Continental France, where I was in charge of upgrading their intranet web applications.

I'm a member of Google Developer Group (GDG) in Tallinn.

In addition, I'm also keen on graphic design and recently even studied that subject part-time at the ... See full profile

Class Ratings

Expectations Met?
  • Exceeded!
  • Yes
  • Somewhat
  • Not really
Reviews Archive

In October 2018, we updated our review system to improve the way we collect feedback. Below are the reviews written before that update.

Why Join Skillshare?

Take award-winning Skillshare Original Classes

Each class has short lessons, hands-on projects

Your membership supports Skillshare teachers

Learn From Anywhere

Take classes on the go with the Skillshare app. Stream or download to watch on the plane, the subway, or wherever you learn best.


1. Drupal module development: welcome: right. Hello there. And welcome in the scores. I'm gonna teach you how to create your own module for drooping eight. We're going to go through all the necessary stages, like creating controller, creating the form block templates, I think your library and off course making your module configurable. 2. Drupal 8 module development intro: Usually you choosed Rupel or worth press when you have ah, relatively small project and your client needs quick results. So content management sees them stands for managing your content. So it's basically Taylor for block type or a noose website. Well, it can be extended in different ways. Andi people create Where is things using truthful? Well, some of them are absolutely crazy, but anyway, it is still a content management system, so you have to think whether it's worth using it. I mean, you get quick results. You can set up your website relatively quickly and show something to your gland. But later on, when you get more and more requirements on your website, you will see the difference between content management system and, for example, a framework. Well, I have a separate course on frameworks. I'm gonna put a link on that. So it's up to you what to choose. So content management system is good when you have us relatively small project, which isn't where it's specific on. Do you know that you need quick results if you got a big project with lots off customer requirements, or you expect your client to ask for this requirements in the future, I would use a framework like lateral or something else or a combination of frameworks. Well, sometimes you may have a client who came to you with a website that was made on Drew Paul seven or eight. In that case you have Teoh, you have no choice over this. And you, your eyes are taken or denying to take that project made Andrew pool. But in jail Yes, it is quite painful to make something really a specific on Drew Paul, because again, you have to play the rules off droop ALS. If you've heard of Triple Seven, the previous version of droop ALS, then dribble eight is absolutely different thing. They've changed quite a lot of droop eight. So I would say they start to two different content management systems holding the same name . So Drew Pilatus made on symphony framework on and it uses to be them engine. It was released in 2015 while Drew pull salmon Westra D. C. In 2011 and it's gonna be supported. Triple seven is going to be supported. Place the security updates are gonna meet until 2021 until November gets load some of the websites are still using Drew pull seven. But well, if you start learning drew people, then I recommend you to do this using triple eight because Triple seven is just like, you know is gonna remain in history comparing to drop of seven triple eighties using object oriented programming concepts. That gum was symphony framework, and it makes Triple eight stronger than triple seven. 3. Setting up Drupal 8: MAMP & Composer: Well, let's start from the beginning. I'm going to show you how to install truthful and firstly, we need Teoh have, ah, local development environment. How to set up the development environment. It is easy. Firstly, you have to instil Well, I'm using mumps and I recommend you this thing. So I like it. This is mumps. Mom is available for both Mac and Windows computers. You go to Mont that in four. You don't go to Mom and pop intro. I am Pro is a paid version off ramp Kinky. Some interesting features. But we are fine with Mom, which is free and I'm actually using Ah, Mom. So yet is God unload here. There's the usual installation, and I'm gonna show you Starting page of Mom Root folder for Mom is gonna be in applications , ma'am, HD docks. And this is our working place. We're gonna install Drew people inside this folder. Well, if you go to Mom settings, you can see that It says that by default, that much sport is eight beach bees is 7.20 that's fine. My skull 5.7. If I start the well, if I start servers, I'm going to get on that beach. Welcome to Mom. So that dress is gonna be local. Host 888 That's our entry point and everything under this directory, he's gonna be here in HD Docks folder. Well, next we need to install droop AIDS using composer Let's installed composer composer is ah, dependence and manager for pH B. Well drew. People seizing page be And we need a dependence manager for PHP. If you have composer, you may escape this part, but if you don't have Composer Week and install it, it's pretty easy if you open terminal and CO. P this comments in turn and that so I have now install Composer. And if we go Teoh Teoh getting started and see how Teoh make our composer Komen Global. So for now it is installed locally. I want Teoh have it in global. So I'm gonna do this. And if I typing composer Yeah, I do You have it installed globally now. So on windows This this comment here Now we have our composer installed and lights and let's install Drew Pull eight using composer Why I'm a using composer to install droop allayed. It's because it is a lot easier to 19 drew people using composer and like highly advice to to do truthful installation Using this way. Yes, you can download disease off Truthful Aid on and Drag and Drop It Inside HD Dogs and Ron the installation. But I think composer is better and like margin way to maintain your website. Guess using composer. You can easily get on update modules and them's on triple core using composer, and you can create patches and use all the features off Composer on your Truthful Aid website. So let's do that using composer. So that's the Komen to create a project using Droop eight. And we're gonna Well, firstly, let's go to the HT Doakes directory and created there applications. Mom HD docks. So we are in the right directory and I'm gonna do that. Andi, following their my true power. Eight. So he's gonna create directory called My Drew Pull eight and then it will automatically execute Composer Installed, which will download the latest stable version of Triple eight on all its dependencies. So now composer has finished installing old Innis three files and dependencies, and we can go to that directory that's their contents off the Trouble. Eight. Installation Webb is the place where we have our Drew people and older related go intent and other files. Heart Wendy are, Ah, the dependencies Composer and drug sh is, ah, common line interface for drew people. So in fact, the location off ah index files is inside Web directory here it is the reason White Index speech peace inside the Web directory is because, well, showing the director with Rush and wondered to the outside world is quite tricky. That's why the website and itself it has been placed inside the Web directory. So when you set up your server, you have to say that the route is going to be inside the Web directory. You can also place, for example, data directory to these parent folder, not inside Web. So in this case, when you have private files in your server is set up to serve Web, then your data folder was private files, for example. Somewhere here is gonna be secured when you make the Web folder or the parent folder in this case might drop late accessible to the world. Then you are taking risks and all your files meant to be used internally like Rush composer , vendor are going to be reasonable to everyone. Let's see what we have had the moment. Let's open Crume and Go Teoh Local host 8888 slash my droop. 08 We're going to see an index off all the files and folders inside my droop of eight, but we need to serve Web If you go to Web it is showing the droop ALS sent up. So let's said Let's configure our 72 Serve the weapon folder instead off my dribble Aid folder. So to do this we have to go to Mom installation folder and then Teoh gone up by cheap on There is a file called http D, don't come. This is Apache configuration file. I'm opening that in a sublime coated Geter. I scrolled down and I see analysis, so I'm pretty using some Alice is that this is gonna be a new one. So alias my droop Oh eight. If I go to this page, my dribble eight, it is gonna redirect meat Teoh applications Mom Paige, your dogs. My Triple eight Web. And here is my and they saw the other options. I'm keeping them by default. I'm going to save this file. I need to restart my mom, Pop. So now if I go Yeah, I do refresh. And now it is pointing through the web folder. 4. Configuring our instance, setting dev environment: right. So this is our triple installation. Let's installed Rupel. Well, language, English. That's fine. Standard profile. He's our requirements. If you well, cashing PHP cashing is not enabled. But that's our development environment. So let it be like that. What? We press continue Anyway, we need Teoh configure our database is gonna be my skill, so Well, let's start with the database. Firstly, we need to create two database for Drew People. Do you do this? We can go to the landing beach off ramp tools Beach be my admin. This is our PHP. My admin for a local host, the address is local host 8888 Beach Be my admin. I'm gonna create a new database. So that's the name off off a new database. My drew. Pool eight. It is empty now, So if I go back, press advanced options database. Name is is my droop eight. And using name is gonna be route for months on truth password by default. So, horse, this local host, but fourth number number. Let's check this If you go to preferences and boards, my school board is this fun table name prefix be That can be empty because We're using a specific database, a dedicated database for this triple instance, we're not gonna have several instances using the same database. So if I I think seven continue it is populating the database, please. Necessary tables? Well, site name gonna be grabs. Drew Powell and my email address. User name for ad mean Well used these. So it's password, password and the fourth country. I don't want to receive email notification. Save and continue. So we see the main pinch off our website. Ah, something is broken here. If you go and look at the console at ours so it cannot load front end. And the reason for that is because we need Teoh can figure our our HD excess file. So to do this, I'm using beach be storm, so create new project from existing files. Soar files are in local directory if your dogs and my truthful eight. So if I go to web, there is that don't HD access file. We need Teoh configure the rewrite base rule. So that's them. All right. Please. And I'm going to save that So old there Front and files will also be redirected to this folder. Were using lamp and it goes under this directory. So I have to configure HD access as well. If I do b fresh so it's now loading the front end as well. This is the default Bartek, then for troop elite. 5. Module specification: right. All right, Now I have my drew people ready for the development. And I'm gonna tell you what mortal do I want to make? Um, my model is gonna be a page. Was, um this custom block in it is j credit my pale. Ah, Andi, I have already this page mate in HTML and JavaScript, and it is showing French railway stations for passengers on data is taken from from Jason from since you have the French railway services Ah, website and their a p I. So it's ah, open a B I. And I'm using this because I'm fine with this structure and with the idea off having a map off railway stations. So it is showing the GPS locations off railway stations on the colors here are just turned them colors. That's how it looks like. Um, javascript isn't that beak and sophisticated. I'm just loading data from there. A p i and I'm parsing through this data and just putting their positions on my top off my map. And I'm using a map off French departments provided by my pale like 20. So I want to integrate this into my website and this purpose I need to create a module. And I'm gonna include the smart in two ways as a block and also as a page content to show you two different ways on how to implement this functionality. 6. Module development: defining a library and bringing components together: Teoh creating new module in true Pilate. Firstly, I need Teoh Open my droop. Oh, insulation in Ah, rotator And I go to folder and you see this modules folder? It's now empty and I'm gonna creating Hugh module. So the convention is to create firstly folder named Custom Drew people. Documentation recommends doing this way. So when you have sorry, when you have you're your custom module, you'd better put that inside custom folder because if you install something using composer , some community module, they will be put inside Con Trip folder. There's gonna be another full dicken trip self our contribution, But your model is a custom one. It's not from triple community. So just put your modules into this location. So we do. You would easily find them in the future. So I have this custom folder and inside these custom folder I'm gonna create and you folder on this folder is going to be with my module. Glad module, snail case. Basic module skeleton will be the following. Firstly, we have to create and in four dot um oh, file was the same name. Asked more Jolene. So this file is gonna tell Drew poem Basic information about this more jewel. So I'm gonna and some basic information. So this is, um Oh, file and pieces. Yamil Syntex on description. And if you have a package, you can if you If you're planning to create several modules for your project, you may create package, but we're only gonna have one more jewel. There's no point in this package. But still, I'm gonna put this module inside blankets. You will see how it looks like. All right, now we have this basic information about our Montel, and the version is one don't zero on the court is eight means for triple eight. So pretty simple. Next, let's think about on work to put our HTML and html Isn't that impressive? Just this bit? Because all the other things, like like container are gonna be provided by Drew. People we want to see this was in our triple page, and as we have aged him out, we need to put that inside that template. So for this, we have to create and you folder gold templates and inside the stem, please folder. We need to create a new file, a new tweak fail. I have a separate Courson Ah, Drew. Pols aiming. But today, where can I talk about a template specific for this module? So it's not going to be a normal right off some Coleman drew people Template. Bet our custom one. Andi, I'm gonna name it. Well, we have to name it. Name over module, but with minus not underscore. Glemp module. I'm going to copy that Based here. Next, let's include our JavaScript. So we have this library called. Not pale. This is the source Quote off this library, and I'm gonna I'm interested in these G s. I'm going to copy it. This Ah folder in here Now I have this Js I'm gonna get you name it. So this is my library inside my module. And now I have to also add the's Js Ah, file G s coat that is going to run these map. So I'm interested in this beat here. I'm going to copy this and based it just here as a new jealous creep file, and I'm gonna call it script orgs. Okay, Now I have to tell my Drew pols that I haven't you library called map. Oh, and I need to include it to my website So to do this, I'm going to create a new file inside my module. So this is gonna be libraries Yemen file, and I'm gonna I declare my my pale planking. I have to declare my jazz files on the location is the following the name off? My, uh, full dirt was dead library. So I have to include if I take a look back at my, uh, source file. I have Jake ready. Ah, my pale and Js mops. France departments So have to include these and that as well. On the last one is my script. And I also have to say that I have the dependency on it is Jake Wedding? 7. Adding block, controller and routing: right. So now we have our library included our street on html. We have to put things together and well, let's first create a block that is gonna run these template. So to make a block, I go to the root off my module and I'm gonna create Ah, and you folder cold. It's our C and SRC folder. Um, we're going to keep older, important things like comptroller sent blocks. And firstly, I'm gonna create in you folder called Plugging. This is Drew Pilate Convention and inside plugging There should be folder block, and I'm going to create a new block file. I'm gonna go it my pub look, and I'm going to find the name space. So our class is gonna extend generic block, and it has to implement a built method on inside this three. We have to say what them is it gonna use? And in our case, it is gonna be these them next. I'm gonna attach the library and name off our library that we have declared here in here. - Next , we have to include some information for Drew people. What's that block about? - And I d for this block label for a not mean panel. I'm gonna add category as well, just to show you they can be categorized. So this information is going to be read by Drew Pool Administration site. So next we have to add a menu item and the page that would bloat our block. So firstly, let's at on you menu item. So to do this, I'm going again to the folder with my module and I I'm gonna add the's new file gold. Glad module dot links, not many dot You know, So this file is gonna say that we, uh, are injecting and you menu item toe our main menu parent is gonna be the main menu. So this route is not existing at the moment because we haven't created our routing file and we have to create this route. And inside this routing file, I'm gonna create this the route. What is the following parameters? So this is a bath for our page stations. Next, we have Teoh Link controller with this fruit. We don't have controller at the moment, but we're going to create it. So let's create the controller. Ah, controller is going to be inside the source folder and I need to create your folder cold controller. So all the controllers are going to be inside these folder controller, and I'm going to create a new class on I'm going to define name space on it's going to extend another, uh, main class Gold controller controller based story, - and I'm going to see that my them is gonna be thes template. 8. Routing and dependency libs: right now, my controller is ready, and I can't include it to my routing. So remember the name space on the name off this controller on this function and basic requirements access content. So it's going to run this permission checked by default on the simplest oneness access content. If User has an access to content, he or she would see this page. And another file that we have to create isn't module files. Those of you who have some experience with Drew Apple seven were wondering why didn't I add this file? Well, because I'm gonna do this now, and inside these I'm gonna implement hook them. - And I'm going to say that my template, which is this one, does not have any valuables. We just had name theory. So if you had to include a valuable, this would be a place where to inject the variable. But I'm not using any variables, and I'm just saying that it's gonna be variables gonna be empty. Why am I doing this? Because Triple eight without this Huq, my template is not gonna work for some reason. So now let's check how it looks like. And what box do we have? So if I go to extent, there's the least off modules. See? There is ah, section called lap glib module showing Travel way stations in front creates a page with mop of stations. What's take a look at the source in four. Not the best naming, but still. Okay, Andi, I'm gonna enable this gay. The module has bean enabled, and I'm going back to the website to see Okay, there is in you menu item map off stations. And if I click on that So now let's the include the block that we have created. You go to structure bloke, layout place block in the States to put it on Lee on this beach on, I'm gonna save this. Go back. Let's take a look at that. Come. So okay. Ah, drop fell is not defined. That's ah, dependency that I forgot to include. So I'm going to do that. That's a dependency. And I'm gonna include that as well. If I just go baste it. - Number based it here. And I also need to include it. So I haven't included. I'm gonna peer cache using drugs. Or you can do that through there. Um, configuration your cash. I'm gonna do it Eat fresh to see that Jake Worries don't defined. And we need to feeds that as well. So it doesn't like this color saying and I have to do it in a different way. It doesn't like this dolar sign and radio function so well, honestly, I don't need it as well. J query. And I'm gonna please No, I'm gonna your cash again and duty Fresh chrome ice not defined. Okay, let's stick. Yes, it's another thing that I forgot to include greens with the same and I'm going to include it, but was still order Rough Island and coma. You're in cash on duty, fresh once again. So now we have it device as a block and it's built function. It's returning these template and a controller was its content function that is returning these template as well. So if you'd like to keep on the Iran think Isar bloke or page, then pay attention. Teoh the a patched library. Because now we have the labour very attached to our look and see It's here. And if I want to keep on Lee page, then ah, it was included just once to avoid duplication, but If I want to give only my controller, then I can ease it included here. And if I disable the book, I'm going to remove it and to be fresh. But then it will steal. Include the library and the page on the controller will see the library, and it will work. 9. Making our module configurable: right. Do you remember We had You are hell hard coded in our script file. So it is here. But what if this you are? L changes from time to time or we need Teoh update something. So for this purpose, we have to use module settings and how to make model settings. That's what's working the implement right now. Firstly, if I go to libraries, I need to say that just gonna be another dependency this time. This dependency, he's core dribble settings. Next, we need Teoh modify our script. I guess now it is hard to code it, but we need to change it. Firstly, I'm gonna I'm gonna copia this beat here and I'm going a put it here for the moment. Andi, I don't believe that. Okay, so we're gonna have some variable called a P. I hear it's not declared at the moment, and this valuable is going to come from Drew pull settings. So to make use off dribble settings, we need Teoh change our script to integrate drew people. So I'm opening here and I'm gonna close it here. Where is the same contents? So as you can see, right, we're already using Jake ready? We also need Teoh used triple settings here. And to do that so the right moment would be somewhere here. I'm declaring my flat able a b a which equals dribble settings dot Don't grab module dot ap I so are the being We don't have this. Ah setting, uh, declared. And it's empty. No, but let's declare these setting. So to do that, I need to creating in folder cold gone thick inside that and as our it's gonna run this contents off the install folder whenever we installed this morning on and you file and inside this file, I'm gonna Auntie Claire, this setting the fault one I'm gonna take it from So I put it here. One thing to mention about this location is that droop alade is allowing you to export content types and field. If you go to structure on and create a new content type, I already have the article Basic article. If you make a new content type or at new field Teoh some content type, then drew people eight is allowing you to export your configuration from configuration synchronization. And if you do, you export single item and you see for example, for Ah, um, for a field you have to expert both field and feel storage. It is generating, Let's say, um, picture field. It is generating this Yemen file. And when you install this module on another instance, off drew people and you have these files included, for example, this way, let's say a picture. It is a default field, but let's imagine it wasn't a default field then. If I added here, you this file name and I copied the content off this insight, this file drew pool deck commendation is suggesting to delete this first line. Drew Pols will add its own i d. When you install it on server or another instance. But I keep it because I realized he no difference whether I have thes i d in my local machine. And the same idea on Sever doesn't matter. And as a set for a field, we have to export both field and field storage field storage for a picture, and it is giving me the file name, and I put it here and these content. So whenever I install this module on sever or another drooping instance, it will run through this installation and it will add these fields to that new instance. So off Triple eight, it is wait to declare fields and content types so you can obviously defined this yourself. But again, documentation is suggesting to use these configuration synchronization functionality to simplify your life. When you create content types and fields, that's a lot better and easier competitive Triple seven. But all right, that was just a quick note where not interested in this at the moment. So I'm going to beat this files. But important thing is that you may have a module, that it's simply installing a new content type or some views through this conflict install and, um oh, file. And it doesn't do anything apart from adding some field or a content type or both, and it is absolutely okay to use module for this purpose. But today we have a bit different and more complex task for our module. So now whenever I install this module, the A p I is gonna be added to our sating. But what if we want to change this setting for this purpose? We need to create a form on to make this form. I have to go to source. We already have controller flagging. And now we need to add form. You you folded form on inside this gonna creating you class gold on the name species. So older module classes are using this name space, that module and it is gonna extend conflict form bays and has implement some methods. Firstly, I'm gonna declare a variable cost variable settings. - So this is this was required method and there's another one Get creditable config names. We need to implement this as well and it's turning the static y ramble settings and now we can make our form. I have Britain Ice Cold completion thanks to PHP Storm A B I's title. It's inside. The tea string starts translatable but it isn't that critical. Do you have it translatable? So as you can see, we're using this conflict as a default value for this form. So whenever opened this form, it will be pre populated with our default value that we defined in savings here. Next, I need to add a submit form handler. When I'm submitting the form, I'm stating the value off this setting to the value from the input off this text eight and so this is my mop settings form glass. So we have a form and we need some place in our administration panel to add a link to this form. So if I go to links menu dot demo, we have already this menu item in our main menu. Now we need to add many right into our admin menu. - So it's gonna be here in our system. Call if IQ panel. And now we have to add this Route two are rooting file. Let's define a bath for those going to pick gun ban their structure. That's fine. It's up to you. So we're telling what form is it gonna load from? Our name? Names, please. And the name off our four mop settings form. And we need to add requirement. It s permission to administer site. So that site admin would be the only role to access this route. No. Let's go and check. What do we have? I'm gonna reinstall the module. Also forgot to put your cash is so have enabled the module I'm committed to you. The fresh to this page. He has loaded the data working the same way. Let's look at our console duty. Fresh once again this is our consul log. Andi. Let's check for the settings. If I go to configuration, there's a configure Glad module top. And this is our a p a. You can change these safe configuration and it will load data from another a P I. 10. Useful tips: rush is Ah, this is a common line interface for Drew. Pull like artisan for lateral. So I'm gonna add Drash to my installation on, um, we'll see how it works. Sound installed. This using drugs? Sh I'm now in my Drew people installation folder Not in my them folder, because my installation for folder this this composer Jason file. So I'm going to use composer required Rush, rush two installed rush and next I can do this, so I have it installed globally. Um, it's mentioned here, um, rush he needs, But you can if you if you if you have another here, you can always use drugs from vendor being drug. Sh this matter. Vendor being crushed and so to clear Cache is in the easier way I can do when they're being rush c r. As you can see, I got this error. And the reason for this error is is one setting in my, um, configuration. Actually, if you're Googling this'll error, you probably won't find exactly. Um, the explanation to this, as usually with ah Drew people, there are plenty off documentation and forums, but it's hard to find exactly what you need. So if I go to my Triple eight installation, go to vamp sides, default on sating speech be. And if I scroll down, there is a host local host. So to make it work, I have to change local horse too its new Mary quality. So it's the same as local host, but just in numbers. All right. And now if I tried Teoh do your cash. It is working. So there are plenty off other comments that you can use with drug sh And it is really powerful toe so but But for me and today, the most important common was to clear cache and we had to use thes bit. And as our cool think is that Drew people gone So it is also common line interface and it is also capable off clear in cash. But it's, ah bit bedroom because we can use it, um, to see the template suggestions. So, firstly, we need to install this again using composer, and we also need to use this launcher to be able to call to poll comment. So now a fray the triple. Okay, there is some error. Ah, some notice. Um, but we're not interested in that at the moment we will see that Ah drivel is working, triple console and important and interesting. Ah, is this comment developer? More. It will do the full link. Firstly, it will show you this template suggestions for a week. And secondly, it want cash tweak templates, and thirdly, you can print out some variables in tweak. Apart from that, it's a must have toe for D Bag Andrew Paul. Eight. It's also capable off, generating some clothes off, simplifying cure back caps altogether with Rush. These two are must have tools for any development on Drew Pilate. Just explore their documentation and see what governments do. Dribble console and drug sh provide.