我尝试使用指向控制器的路由文件创建新模块。但是我的日志中出现以下错误
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>')
];
}
}
答案 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