如何在 Drupal 中显示一个简单的自定义页面?

Posted

技术标签:

【中文标题】如何在 Drupal 中显示一个简单的自定义页面?【英文标题】:How to display a simple custom page in Drupal? 【发布时间】:2021-12-26 17:01:16 【问题描述】:

最近,我尝试使用 Drupal 9.2.8 开发一个网站。我不习惯使用 php,很多事情对我来说看起来很奇怪(比如为什么在路径中使用 \ 而不是 / ???)。无论如何,我想创建一个显示“Hello world”的自定义页面,所以我尝试制作一个新模块,但是当我尝试访问该页面时找不到它。

我把我所有的代码都放在下面:

modules/custom/hello/hello.info.yml
name: Hello World Module
description: Creates a page showing "Hello World".
package: Custom

type: module
core: 8.x
core_version_requirement: ^8 || ^9
modules/custom/hello/hello.routing.yml
hello.my_page:
  path: '/hello'
  defaults:
    _controller: '\Drupal\hello\Controller\ExampleController::myPage'
    _title: 'My first page in D9'
  requirements:
    _permission: 'access content'

modules/custom/hello/src/Controller/ExampleController.php
<?php
namespace Drupal\hello\Controller;

use Drupal\Core\Controller\ControllerBase;

/**
 * Provides route responses for the Example module.
 */
class ExampleController extends ControllerBase 

  /**
   * Returns a simple page.
   *
   * @return array
   *   A simple renderable array.
   */
  public function myPage() 
    return [
      '#markup' => 'Hello, world',
    ];
  

我激活了index.php/admin/modules 中的模块并清除了index.php/admin/config/development/performance 中的缓存。我尝试使用/helloindex.php/hello 访问该页面,但在这两种情况下都显示“找不到页面”。

谁能告诉我我做错了什么?

编辑

我纠正了一些打字错误,但我仍然遇到同样的问题,我尝试将它安装在不同的服务器上,它可以工作,似乎是我的服务器配置有问题。

不管怎样,这个模块适用于 Drupal 9.2.8,也许有人可以用它作为一个简单的例子。

谢谢。

【问题讨论】:

【参考方案1】:

我认为你有一个命名空间错误。您的模块名称是“hello”,但在您的命名空间中,您使用“example”而不是“hello”。如果将 ExampleController.php 和 hello.routing.yml 中的“example”更改为“hello”,模块将正常工作。

顺便说一句:您可以在没有自定义 PHP 的情况下使用 Drupal,但要充分发挥 Drupal 的魔力和力量,您应该学习 OOP-PHP 和 Symfony 的基础知识。

【讨论】:

感谢您的评论和建议。我编辑了我的帖子。最后,即使在更正之后,它也不起作用,但它可以在不同的服务器上运行,所以我认为我的服务器配置有问题。

以上是关于如何在 Drupal 中显示一个简单的自定义页面?的主要内容,如果未能解决你的问题,请参考以下文章

用于 drupal 视图的自定义 page.tpl.php

Drupal 7 新的自定义模板

自定义 drupal 搜索结果页面

使用选择性覆盖的Drupal视图的术语(而非分类)的自定义分类法页面

Drupal 6 中的自定义搜索表单:视图/面板还是自定义 sql?

Drupal 8 自定义模块未显示在块布局中