我试图创建一个指向控制器的路由文件的新模块。但我得到以下错误在我的日志
ReflectionException: Class DrupalglueControllerGlueController 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: 'DrupalglueControllerGlueController::helloWorldPage'
requirements:
_permission: 'access content'
带以下控制器
project_folder/模块/胶水/src/控制器/GlueController
<?php
namespace DrupalglueController;
class GlueController {
public function hellowWorldPage() {
return [
'#markup' => t('<p>Hello world</p>')
];
}
}
我在创建第一个drupal 8模块时遇到了类似的错误。我无法找出你案例中的错误,但我想分享一下我案例中的错误。
不知怎么的,myController.php文件被放在 之外/my_module/src/控制器/
文件夹中。
将文件移到合适的目录解决了问题。
也许这能节省某人的时间。
出现这种情况的原因有很多。在我的例子中,这是由于机器名不匹配。模块的机器名必须与控制器中使用的命名空间匹配。
namespace DrupalglueController;
这里的glue
必须与文件名相同glue.info.yml
您的命名不匹配。
从你的控制器:
public function hellowWorldPage() {
从你的路由文件:
_controller: 'DrupalglueControllerGlueController::helloWorldPage'
请注意,在路由文件的_controller元素中,方法名和调用它的路径。
我也面临同样的问题。我再三检查了所有文件和文件夹的名称和位置是否正确,并检查了名称空间。
然后我重命名了我的控制器,并在命名空间,路由文件等中插入了新名称,然后它工作了。
是的,我也遇到过类似的问题,在确保所有模块的文件夹结构和命名约定都是完美的之后,最终解决的问题是在声明控制器类之后缺少分号。
由于某些原因,我的IDE没有抱怨这个:
class FirstController extends ControllerBase {
//code
}; // !SEMICOLON IMPORTANT