Defining routes in .routing.ymlfor Drupal 8 , 9 , 10 , and 11

Last updated :  

Routing is a crucial component in Drupal module development as it determines how URLs map to content or functionality. This lesson delves into defining routes within a .routing.yml file, providing a pathway for your module to direct user requests to the appropriate content or logic.

Understanding Drupal's Routing System

Drupal's routing system utilizes Symfony components to define URL paths and associate them with specific controllers that handle requests. It replaces the old hook_menu approach, preferring a more structured YAML-based configuration. Routes are defined in .routing.yml files, offering a clear, declarative way to manage site navigation and content delivery.

Creating a .routing.yml File

Each custom module requires a .routing.yml file to define its routing specifics. This file is placed within the module's directory, alongside other configuration files like .info.yml. For our example with a module named "Hello World," this will be hello_world.routing.yml.

Begin by creating this file within the modules/custom/hello_world directory.

Defining Basic Routes

A route in Drupal is defined with a unique name and several key attributes. Below is a sample structure for a route:

hello_world.content:
  path: '/hello'
  defaults:
    _controller: '\Drupal\hello_world\Controller\HelloWorldController::content'
    _title: 'Hello World'
  requirements:
    _permission: 'access content'
        
  • Route Name: hello_world.content uniquely identifies the route within your application. It's a good practice to prefuse the module name, ensuring global uniqueness.
  • Path: /hello specifies the URL path that users navigate to for accessing the route. This example would be accessible at http://yourdrupalsite.com/hello.
  • Defaults: Within this key, _controller defines the method in the controller that handles the request. The _title provides a title for the page when accessed.
  • Requirements: These conditions determine who can access this route using permissions like access content.

Creating Controllers for Routing

The route's _controller is crucial as it dictates the logic executed when the route is accessed. Here's how you can set up a basic controller:

Step 1: Create the Controller

Create a file named HelloWorldController.php within a src/Controller directory in your module folder:

namespace Drupal\hello_world\Controller;

use Drupal\Core\Controller\ControllerBase;

class HelloWorldController extends ControllerBase {
  public function content() {
    return [
      '#markup' => $this->t('Hello, World! Welcome to my custom Drupal module.'),
    ];
  }
}
        

Here, the controller returns a simple 'Hello, World!' message when the route is accessed. This can be expanded into more complex operations as needed.

Testing Your Route

Once your route and controller setups are complete, it's essential to test them:

  1. Clear caches: Routes require cache clearance before changes are recognized. Run:
    drush cr
    This clears the cache, ensuring Drupal recognizes the new route configuration.
  2. Access the route: Open your browser and navigate to /hello on your site. Verify the 'Hello, World!' message appears, confirming successful routing.

Conclusion

Defining routes in a .routing.yml file is a foundational step in crafting dynamic and navigable content in your Drupal site. This lesson covered setting up basic routes and using controllers to handle requests. Successfully implementing this opens the way for more complex interactions and functionalities.

In the next lesson, we will explore Setting up URL paths for routes, where you'll learn about creating dynamic routes that handle variable data inputs from URLs. Let's continue our journey!