1

我正在尝试使用指向控制器的路由文件创建一个新模块。但是我的日志中出现以下错误

ReflectionException: Class \Drupal\glue\Controller\GlueController does not exist in ReflectionMethod->__construct() (line 128 of /home/vagrant/Projects/neut-business-website/core/lib/Drupal/Core/Entity/EntityResolverManager.php).

胶水.routing.yml:

hello_world:
 path: '/hello-world'
 defaults:
  _controller: '\Drupal\glue\Controller\GlueController::helloWorldPage'
 requirements:
  _permission: 'access content'

带以下控制器

project_folder/modules/glue/src/Controller/GlueController

<?php
namespace Drupal\glue\Controller;


class GlueController {

  public function hellowWorldPage() {
    return [
      '#markup' => t('<p>Hello world</p>')
    ];
  }
}
4

5 回答 5

2

在创建我的第一个 drupal 8 模块时,我遇到了类似的错误。我无法弄清楚您的案例中的错误,但想分享我的案例中的错误。

不知何故,myController.php 文件被放置在

/my_module/src/控制器/

文件夹。

将文件移动到正确的目录解决了这个问题。

也许这会在某天某天节省某人的时间:)

于 2016-01-01T19:59:11.433 回答
1

这可能由于多种原因而发生。就我而言,这是由于机器名称不匹配造成的。模块的机器名称必须与我们在控制器中使用的命名空间匹配。

namespace Drupal\glue\Controller;

这里glue必须和文件名glue.info.yml一样

于 2016-05-12T03:36:34.520 回答
0

我遇到了同样的问题。我三重检查了所有文件和文件夹是否正确命名和正确放置,并检查了命名空间。

然后我重命名了我的控制器并将新名称插入到命名空间、路由文件等中,然后它就起作用了。不知道为什么。

于 2017-03-09T12:13:42.083 回答
0

你有一个命名不匹配。

从您的控制器:

public function hellowWorldPage() {

从您的路线文件中:

 _controller: '\Drupal\glue\Controller\GlueController::helloWorldPage'

请注意方法名称与在路由文件的 _controller 元素中调用它的路径。

于 2016-04-29T19:27:58.650 回答
-2

是的,我遇到了类似的问题,在确保所有模块文件夹结构和命名约定都很完美之后,最终解决了控制器类声明后缺少分号的问题。

出于某种原因,我的 IDE 没有对此抱怨:

class FirstController extends ControllerBase {

    //code

}; // !SEMICOLON IMPORTANT
于 2016-08-08T05:44:35.100 回答