Magento 2.3 Вводит помощника в ошибку типа объекта контроллера?


Извините, я новичок в M2, у меня возникает ошибка всякий раз, когда я загружаю вспомогательный класс в контроллер. Я искал все в Интернете, но безуспешно. Вот настройка и ошибка при загрузке

Настройка: Сервер Magento 2.3 Centos 7 / PHP7.2 / Локальная виртуальная машина

Трассировка ошибок

1 исключение(исключения): Исключение #0 (Magento\Framework\Исключение\Исключение времени выполнения): При создании объекта произошла ошибка типа: Пользовательский\Платеж\Контроллер\Индекс\Индекс\Перехватчик

Исключение #0 (Исключение Magento\Framework\Exception\RuntimeException): При создании объекта произошла ошибка типа: Пользовательский\Платеж\Контроллер\Индекс\Индекс\Перехватчик #0 /var/www/html/vendor/magento/framework/ObjectManager/Factory/Dynamic/Developer.php (66): Magento\Framework\ObjectManager\Фабрика\Абстрактный завод->Создать объект ('Пользовательский\Оплата\...', Массив) # 1 /var/www/html/vendor/magento/framework/ObjectManager/ObjectManager.php (56): Magento\Framework\ObjectManager\Фабрика\Динамический\Разработчик->создать ('Пользовательский\Оплата\...', Массив) # 2 /var/www/html/vendor/magento/framework/App/ActionFactory.php (44): Magento\Framework\ObjectManager\ObjectManager->создать ("Пользовательский\Платеж\...") # 3 /var/www/html/vendor/magento/framework/App/Router/Base.php (304): Magento\Фреймворк\Приложение\ActionFactory->создать ("Пользовательский\Платеж\...") # 4 /var/www/html/vendor/magento/framework/App/Router/Base.php (165): Magento\Фреймворк\Приложение\Маршрутизатор\База->Сопоставление (Объект(Magento\Фреймворк\Приложение\Запрос\Http), Массив) # 5 /var/www/html/vendor/magento/framework/App/FrontController.php (95): Magento\Фреймворк\Приложение\Маршрутизатор\База->совпадение(Объект(Magento\Фреймворк\Приложение\Запрос\Http)) #6 /var/www/html/vendor/magento/framework/Interception/Interceptor.php (58): Magento\Framework\Приложение\FrontController->отправка(Объект(Magento\Framework\Приложение\Запрос\Http)) #7 /var/www/html/vendor/magento/framework/Interception/Interceptor.php (138): Magento\Фреймворк\Приложение\Фронтконтроллер\Перехватчик->___callParent("отправка", Массив) #8/var/www/html/vendor/magento/module-store/App/FrontController/Plugin/RequestPreprocessor.php (94): Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception{closure}(Object(Magento\Framework\App\Request\Http)) #9 /var/www/html/vendor/magento/framework/Interception/Interceptor.php (135): Magento\Store\App\FrontController\Plugin\RequestPreprocessor->aroundDispatch(Object(Magento\Framework\App\FrontController\Interceptor), Объект (Закрытие), Объект (Magento\Framework\Приложение\Запрос\Http)) #10 /var/www/html/vendor/magento/module-page-cache/Model/App/FrontController/BuiltinPlugin.php (69): Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception{closure}(Object(Magento\Framework\App\Request\Http)) #11 /var/www/html/vendor/magento/framework/Interception/Interceptor.php (135): Magento\PageCache\Model\App\FrontController\BuiltinPlugin->aroundDispatch(Object(Magento\Framework\App\FrontController\Interceptor), Объект (Закрытие), Объект (Magento\Framework\Приложение\Запрос\Http)) #12/var/www/html/vendor/magento/framework/Interception/Interceptor.php (153): Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception{closure}(Object(Magento\Framework\App\Request\Http)) #13/var/www/html/generated/code/Magento/Framework/App/FrontController/Interceptor.php (26): Magento\Фреймворк\Приложение\Фронтконтроллер\Перехватчик->___Подключаемые модули вызовов("отправка", Массив, НУЛЬ) #14/var/www/html/vendor/magento/framework/App/Http.php (135): Magento\Framework\App\FrontController\Interceptor->dispatch(Object(Magento\Framework\App\Request\Http)) #15/var/www/html/generated/code/Magento/Framework/App/Http/Interceptor.php (24): Magento\Фреймворк\Приложение\Http->запуск() #16 /var/www/html/vendor/magento/framework/App/Bootstrap.php (258): Magento\Фреймворк\Приложение\Http\Перехватчик->запуск() #17/var/www/html/index.php (39): Magento\Framework\Приложение\Начальная загрузка->выполнить(Объект(Magento\Framework\Приложение\Http\Перехватчик)) #18 {главная}

Вспомогательный Код

namespace Custom\Payment\Helper;

use Magento\Framework\App\Helper\AbstractHelper;

class General extends AbstractHelper
{

    public function RandomFunc()
       {
               echo "This is Helper in Magento 2";
       }

}

Код контроллера

namespace Custom\Payment\Controller\Index;

use Custom\Payment\Helper\General as CustomHelper;
use Magento\Framework\App\Action\Action;

class Index extends Action
{
    protected $helper;

    public function __construct(
        CustomHelper $helper
    ) {
        $this->helper = $helper;
    }

    public function execute()
    {
        $this->helper->RandomFunc();
    }
}

Кто-нибудь может просветить меня, где я поступил неправильно?

Спасибо вам!

 10
Author: Adarsh Khatri, 2018-12-10

4 answers

У вас возникла проблема в __construct(.

Вы должны передать объект контекста \Magento\Framework\App\Action\Context $context родительскому классу Magento\Framework\App\Action\Action

public function __construct(
\Magento\Framework\App\Action\Context $context,
    CustomHelper $helper
) {
    $this->helper = $helper;
parent::__construct($context);
}

после этих изменений, находясь в режиме разработчика, просто удалите папки в разделе var/generation/или сгенерированный/, как указано в документации

или запустите программу установки:di:компиляция в рабочем режиме


 18
Author: Amit Bera, 2021-01-27 17:13:23

Просто удалите папку создания или в версии 2.2 удалите созданную папку.

Сгенерированный Rm-rf/

Очистите кэш. Тогда это должно сработать. Это потому, что файл перехватчика необходимо создать заново или обновить.

 24
Author: Shubham Mathur, 2019-01-10 11:53:30

В дополнение к ответу Амита Беры убедитесь, что, если вы добавляете какие-либо новые параметры в метод __construct(), вы добавляете их перед любыми параметрами со значениями по умолчанию (например, null), определенными.

 1
Author: Tyler V., 2019-08-13 01:06:48

Выполните команды di complie и очистки кэша

php bin/magento s:d:c

Php bin/magento c:c

Php bin/magento c:f
 0
Author: Sathya, 2020-03-16 08:42:09