I'm new on Drupal. I try to follow a tuto in order to build my own module.

Drupal 8 (latest version) is installed on MacOS. For example, I use it through URL : http://localhost/drupal/admin/content

My module is defined like this :

  • Drupal
    • code
    • modules
      • hello_world
        • hello_world.info.yml
        • hello_world.links.menu.yml
        • hello_world.routing.yml
          • src
            • Controller
              • HelloController.php
    • ...

File content : hello_world.info.yml

name: Hello World Module
description: Creates a page showing "Hello World".
package: Custom
type: module
version: 1.0
core: 8.x

File content : hello_world.routing.yml

  path: '/hello'
    _controller: '\Drupal\hello_world\Controller\HelloController::helloWorld'
    _title: 'Hello World'
    _permission: 'access content'

File content : hello_world.links.menu.yml

  title: 'Hello module settings'
  description: 'example of how to make an admin settings page link'
  parent: system.admin_config_development
  route_name: hello_world.hello_world
  weight: 100

File content : HelloController.php

 * @file
 * Contains \Drupal\hello_world\Controller\HelloController.

namespace Drupal\hello_world\Controller;
use Drupal\Core\Controller\ControllerBase;

 * Defines HelloController class.
class HelloController extends ControllerBase {

   * Display the markup.
   * @return array
   *   Return markup array.
  public function helloWorld() {
  $output = array();

  $output['hello_world'] = array(
    '#markup' => $this->t('Hello World!'),
  return $output;



Regardless "clear cache", I have a page not found !

I try the urls :

But results are the same. What should be the right url ? And why I'm getting "page not found", where is the issue ?

  • Have you installed the module?
    – Clive
    Commented Feb 27, 2019 at 10:12
  • yes, module is checked in /drupal/admin/modules
    – gduh
    Commented Feb 27, 2019 at 10:15

2 Answers 2


Creating a module does not automatically enable it.

I tried your code in a clean Drupal 8 installation and /hello show the page as expected.

Try running drush en hello_world to enable you module and you should be ok.

If that is not the case, then you can use drupal route:debug to see a complete list of your site routes, so you can know if your route is registered.

  • The OP said the module is selected in /admin/modules.
    – apaderno
    Commented Feb 27, 2019 at 12:30
  • I copy pasted the exact OP code in web/modules/hello_world, I enabled it and /hello works as expected. It has to be some mistake in OP's pathing if the module is actually enabled.
    – anpel
    Commented Feb 27, 2019 at 12:59
  • Since I installed Drupal without using Composer, I'm not able to use drush and drupal console. So, I decided to re-install Drupal using Composer and all the required tools. Then, I installed my custom module by checking directly in admin/modules. And now it's ok. If I use drush to install/uninstall it's ok too. At the end I don't know where was the issue. I don't like not understanding what the problem was, but the second install from Composer was so different, I'm not able to find why !
    – gduh
    Commented Feb 27, 2019 at 16:36

Since it looks like you're just starting out D8 development, additionally to drupal route:debug command I would install devel and admin toolbar modules that help out a lot in dev. Once devel is installed you could checkout the routing information at the taskbar and see all available paths to be sure your new module path is registered.

Another thing you might wanna take a look at is turning cache of completely on your local to see your changes immediately. Take a look at this guide for that.

  • No, the route name doesn't need to match the controller method used for the route output.
    – apaderno
    Commented Feb 27, 2019 at 16:29
  • Just tested this you're right it doesn't, edited answer now. Fresh into D8 dev from d7, maybe all examples I came across with that approach were doing it as a best practice if not coincidence. Thanks for your correction.
    – seroton
    Commented Feb 27, 2019 at 17:20

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.