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();
}
}
Кто-нибудь может просветить меня, где я поступил неправильно?
Спасибо вам!
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:компиляция в рабочем режиме
Просто удалите папку создания или в версии 2.2 удалите созданную папку.
Сгенерированный Rm-rf/
Очистите кэш. Тогда это должно сработать. Это потому, что файл перехватчика необходимо создать заново или обновить.
В дополнение к ответу Амита Беры убедитесь, что, если вы добавляете какие-либо новые параметры в метод __construct(), вы добавляете их перед любыми параметрами со значениями по умолчанию (например, null), определенными.
Выполните команды di complie и очистки кэша
php bin/magento s:d:c
Php bin/magento c:c
Php bin/magento c:f