Я пытаюсь создать новый модуль с файлом маршрутизации, указывающим на контроллер. Но я получаю следующую ошибку в моих журналах
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 / Controller / GlueController
<?php
namespace Drupal\glue\Controller;
class GlueController {
public function hellowWorldPage() {
return [
'#markup' => t('<p>Hello world</p>')
];
}
}
Я столкнулся с подобной ошибкой при создании моего первого модуля drupal 8. Я не могу понять ошибку в вашем случае, но хотел бы поделиться ошибкой в моем случае.
Каким-то образом файл myController.php был размещен вне
/ My_module / SRC / контроллер /
папка.
Перемещение файла в соответствующий каталог решило проблему.
Может быть, это когда-нибудь сэкономит кому-то время 🙂
У вас несоответствие имен.
С вашего контроллера:
public function hellowWorldPage() {
Из вашего файла маршрута:
_controller: '\Drupal\glue\Controller\GlueController::helloWorldPage'
Обратите внимание на имя метода и путь для его вызова в элементе _controller в файле маршрутизации.
Это может произойти по нескольким причинам. В моем случае это было связано с несоответствием в имя машины. Имя машины модуля должно совпадать с Пространство имен который мы используем в контроллере.
namespace Drupal\glue\Controller;
Вот glue
должно совпадать с именем файла glue.info.yml
Я столкнулся с той же проблемой. Я трижды проверил, что все файлы и папки были правильно названы и правильно размещены, и проверил пространства имен.
Затем я переименовал свой контроллер и вставил новое имя в пространства имен, файл маршрутизации и т. Д., И тогда это сработало. Не уверен, почему, хотя.
Да, у меня была похожая проблема, и после проверки все структуры папок модулей и соглашения об именах были идеальными, что в итоге решило проблему отсутствия точки с запятой после объявления класса контроллера.
По какой-то причине моя IDE не жаловалась на это:
class FirstController extends ControllerBase {
//code
}; // !SEMICOLON IMPORTANT