没有找到Drupal类

时间:2015-07-30 15:55:59

标签: php drupal namespaces drupal-8 psr-4

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

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).

glue.routing.yml:

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

使用以下控制器

project_folder /模块/胶水/ SRC /控制器/ GlueController

<?php
namespace Drupal\glue\Controller;


class GlueController {

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

5 个答案:

答案 0 :(得分:2)

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

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

之外
  

/ my_module / SRC /控制器/

文件夹中。

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

可能这有一天可以节省某人的时间:)

答案 1 :(得分:0)

您的命名不匹配。

来自您的控制器:

public function hellowWorldPage() {

从你的路线档案:

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

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

答案 2 :(得分:0)

这可能由于几个原因而发生。在我的情况下,这是由于机器名称不匹配。模块的机器名称必须与我们在控制器中使用的命名空间匹配。

namespace Drupal\glue\Controller;

此处glue必须与文件名 glue.info.yml

相同

答案 3 :(得分:0)

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

然后我重命名了我的Controller,并在名称空间,路由文件等中插入了新名称,然后就可以了。不知道为什么会这样。

答案 4 :(得分:-1)

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

出于某种原因,我的IDE并没有抱怨这个:

class FirstController extends ControllerBase {

    //code

}; // !SEMICOLON IMPORTANT