Класс Drupal не найден

Я пытаюсь создать новый модуль с файлом маршрутизации, указывающим на контроллер. Но я получаю следующую ошибку в моих журналах

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>')
];
}
}

1

Решение

Я столкнулся с подобной ошибкой при создании моего первого модуля drupal 8. Я не могу понять ошибку в вашем случае, но хотел бы поделиться ошибкой в ​​моем случае.

Каким-то образом файл myController.php был размещен вне

/ My_module / SRC / контроллер /

папка.

Перемещение файла в соответствующий каталог решило проблему.

Может быть, это когда-нибудь сэкономит кому-то время 🙂

2

Другие решения

У вас несоответствие имен.

С вашего контроллера:

public function hellowWorldPage() {

Из вашего файла маршрута:

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

Обратите внимание на имя метода и путь для его вызова в элементе _controller в файле маршрутизации.

0

Это может произойти по нескольким причинам. В моем случае это было связано с несоответствием в имя машины. Имя машины модуля должно совпадать с Пространство имен который мы используем в контроллере.

namespace Drupal\glue\Controller;

Вот glue должно совпадать с именем файла glue.info.yml

0

Я столкнулся с той же проблемой. Я трижды проверил, что все файлы и папки были правильно названы и правильно размещены, и проверил пространства имен.

Затем я переименовал свой контроллер и вставил новое имя в пространства имен, файл маршрутизации и т. Д., И тогда это сработало. Не уверен, почему, хотя.

0

Да, у меня была похожая проблема, и после проверки все структуры папок модулей и соглашения об именах были идеальными, что в итоге решило проблему отсутствия точки с запятой после объявления класса контроллера.

По какой-то причине моя IDE не жаловалась на это:

class FirstController extends ControllerBase {

//code

}; // !SEMICOLON IMPORTANT
-1
По вопросам рекламы [email protected]