At the end of February, I began working on an series of API endpoints that would allow for a progressively decoupled cart experience. There are a few reasons why we decided that Drupal Commerce needed an API solely for the cart.
- Performance: when a cart block is rendered on the server it has complicated cache metadata. Cart block contents vary per user and change too often to be cached effectively. As such these blocks incur heavy logic and rendering costs.
As a result, we now have the Commerce Cart API module. Our first implementation will be the Commerce Cart Flyout module, which uses the RESTful endpoints provided by the Cart API module to create the dynamic cart interface shown in the sample animation below.
This moves us decidedly down the path of providing Drupal Commerce users with progressively decoupled components that improve the customer experience. In a following blog post, I’ll going to write about what it was like to build this module. (Hint: we didn’t “just do it” and release it into the Drupal.org namespace.)
I am planning on experimenting with more areas that we can perform progressive decoupling and look forward to connecting with folks about the topic at Decoupled Drupal Days in August. You should meet me there to join in the conversation!
I recently stumbled upon an article which stated some facts on technology and its impact on one of the biggest sectors in the world - Healthcare. I was taken by surprise to know that a survey which engaged patients of all varieties, stated that two thirds of them had not been in a discussion with the doctors about their own treatment, more than 35% did not have a clear picture about the goals of their treatment, and 20% received a conflicting information from different professionals.
In many cases, a route name is something you might need to get something done in Drupal 8. For example to generate a link, or maybe create a local task in your module.
Some examples:The path can be found in a routing.yml file
Some times you can just search for the path in your codebase, and then find the corresponding route name. Let's say that I wanted to link to the page mysite.com/admin/config/regional/translate. If I just search the codebase for this path, it would be revealed in the file locale.routing.yml:locale.translate_page: path: '/admin/config/regional/translate' defaults: _controller: '\Drupal\locale\Controller\LocaleController::translatePage' _title: 'User interface translation' requirements: _permission: 'translate interface'
To link to this page using the API for generating links, I would then do something like this:$link = Link::fromTextAndUrl(t('Translate interface'), Url::fromRoute('locale.translate_page'));
So to conclude, the route name for that particular page is the key in the routing file, in this case locale.translate_page.The path can not be found in a routing.yml file
Now, this is what I really wanted to write about in this blog post. Getting the route name directly from a routing file is simple enough, but where do you look if the path can not be found in a routing file?Find route name with PHPStorm
My first trick is to utilize the IDE I use, PHPStorm.
Start by setting a breakpoint in index.php on the line that looks like this:$response->send();
Next step, refresh your browser on the page you want to know the route name for, and hopefully trigger your breakpoint. Then you click on the icon for "evaluate expression". On my work computer this has the shortcut key alt-f8, but you can also find it in the debugger toolbar, or via the menu (Run -> Evaluate expression).
Then evaluate the following code:\Drupal::routeMatch()->getRouteName()
That should give you the name of the route. As illustrated below in a gif:Find route name with any development enviroment.
Now, I realize that not everyone uses PHPStorm, so here is one solution that should work without having xdebug and an IDE set up:
Following the same tactic as above, let's open up index.php again. Now, just change the following code:$response = $kernel->handle($request); +print_r(\Drupal::routeMatch()->getRouteName()); $response->send();
The difference here is adding the line with print_r.
Now visit the page you want to know the route name for. This will print the name of the route as the very first output of your Drupal site. Since you probably do not want this for your live Drupal site, this is best done on a development copy.Other options
You can also use the module webprofiler which is a part of the devel module. This may or may not invlove more steps than necessary, depending on your project. But to be fair, that is also an option.
To finish off, here is an animated gif in the category "route". Let me know your tips and tricks in the comments!