2.1 (Исключение ReflectionException): Класс... не существует
Я написал пользовательский модуль доставки для Magento 2.0, который добавляет опцию LTL/испуг. Он работал в Magento 2.0.7, и я недавно тестировал 2.1.7. Похоже, что все мои другие (самостоятельно созданные) модули работают, но мой модуль доставки не работает.
После добавления товара в корзину и перехода к http://localhost/checkout/cart
я получаю следующее ошибка:
Exception #0 (ReflectionException): Class Comstar\Tli\Model\Carrier does not exist
#0 D:\Web\html\vendor\magento\framework\Code\Reader\ClassReader.php(19): ReflectionClass->__construct('Comstar\\Tli\\Mod...')
#1 D:\Web\html\vendor\magento\framework\ObjectManager\Definition\Runtime.php(44): Magento\Framework\Code\Reader\ClassReader->getConstructor('Comstar\\Tli\\Mod...')
#2 D:\Web\html\vendor\magento\framework\ObjectManager\Factory\Dynamic\Developer.php(71): Magento\Framework\ObjectManager\Definition\Runtime->getParameters('Comstar\\Tli\\Mod...')
#3 D:\Web\html\vendor\magento\framework\ObjectManager\ObjectManager.php(57): Magento\Framework\ObjectManager\Factory\Dynamic\Developer->create('Comstar\\Tli\\Mod...', Array)
#4 D:\Web\html\vendor\magento\module-shipping\Model\CarrierFactory.php(74): Magento\Framework\ObjectManager\ObjectManager->create('Comstar\\Tli\\Mod...')
#5 D:\Web\html\vendor\magento\module-shipping\Model\Config.php(65): Magento\Shipping\Model\CarrierFactory->create('tli', NULL)
#6 D:\Web\html\vendor\magento\module-checkout\Model\DefaultConfigProvider.php(590): Magento\Shipping\Model\Config->getActiveCarriers()
#7 D:\Web\html\vendor\magento\module-checkout\Model\DefaultConfigProvider.php(292): Magento\Checkout\Model\DefaultConfigProvider->getActiveCarriers()
#8 D:\Web\html\vendor\magento\framework\Interception\Interceptor.php(146): Magento\Checkout\Model\DefaultConfigProvider->getConfig()
#9 D:\Web\html\var\generation\Magento\Checkout\Model\DefaultConfigProvider\Interceptor.php(26): Magento\Checkout\Model\DefaultConfigProvider\Interceptor->___callPlugins('getConfig', Array, Array)
#10 D:\Web\html\vendor\magento\module-checkout\Model\CompositeConfigProvider.php(32): Magento\Checkout\Model\DefaultConfigProvider\Interceptor->getConfig()
#11 D:\Web\html\vendor\magento\module-checkout\Block\Cart\Shipping.php(54): Magento\Checkout\Model\CompositeConfigProvider->getConfig()
#12 D:\Web\html\vendor\magento\module-checkout\view\frontend\templates\cart\shipping.phtml(28): Magento\Checkout\Block\Cart\Shipping->getCheckoutConfig()
.... (stack trace continues to 95 lines)
App/code/Comstar/Tli/Model/Carrier.php
namespace Comstar\Tli\Model;
[... class imports ...]
class Carrier extends AbstractCarrier implements CarrierInterface
{
[... var declarations ...]
public function __construct([... DI ...])
{
parent::__construct($scopeConfig, $errorFactory, $log, $data)
}
}
App/code/Comstar/Tli/etc/config.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd">
<default>
<carriers>
<tli>
<active>1</active>
<sallowspecific>0</sallowspecific>
<allowed_methods>AACR,AACT</allowed_methods>
<model>Comstar\Tli\Model\Carrier</model>
<type>LTL</type>
<title>Freight</title>
<name>Comstar LTL</name>
<specificerrmsg>There are no LTL Quotes available for this shipment.</specificerrmsg>
<min_package_weight>125</min_package_weight>
<max_package_weight>10000</max_package_weight>
</tli>
</carriers>
</default>
</config>
Класс Comstar\Tli\Model\Carrier
явно существует, и, как я уже сказал, этот модуль работал в версии 2.0.7. Я сделал краткий обзор Magento_Ups
, чтобы посмотреть, изменилось ли что-нибудь существенное в способе загрузки модулей доставки, но, похоже, он не построен по-другому.
Я продолжаю WAMP 3.0.9
, PHP 7.0.21
. Я обновил версию с 2.0.7 до 2.1.7, удалив папку /vendor/
и копирование всех файлов 2.1.7 в корневой каталог Magento 2.
Почему Magento 2.1 не может найти мой класс?
6 answers
Я в своем деле,
На самом деле у меня была синтаксическая ошибка в конструкторе. но это не было показано как обычные ошибки с номером строки. Я побежал,
php bin/magento setup:di:compile
Он отобразил синтаксическую ошибку и показал номер строки. Затем обновите,
php bin/magento setup:upgrade
И развернуть,
php bin/magento setup:static-content:deploy
Для режима разработчика,
php bin/magento setup:static-content:deploy -f
Это может быть полезно.
Вы можете попробовать использовать
setup:di:compile
Команда.
Также попробуйте удалить var/кэш/*var/кэш страниц/*var/генерация/*
И запустить
setup:upgrade
Команда.
Оказывается, в этом конкретном файле я открыл тег <?
вместо тега <?php
. Я не уверен, была ли это более новая версия WAMP или PHP, которая вызвала такую чувствительность, но использование <?php
устранило проблему!
Я решаю эту проблему, надеюсь, кто-нибудь получит помощь
-
Компакт-диск magento2.3.x
Найти сгенерированный var паб поставщика/статический паб/медиа-приложение/и т. Д. - тип f-exec chmod g+w {}+
Найти сгенерированный var паб поставщика/статический паб/медиа-приложение/и т. Д. - тип d-exec chmod g+ws{}+
Chown -R: www-данные.
Chmod u+x bin/magento
Войдите на свой сервер и компакт-диск в корневой каталог Magento и запустите:
php bin/magento setup:di:compile
Я обнаружил, что это может быть результатом строгого типа PHP:
declare(strict_types=1);
Я удалил это в своем пользовательском модуле, на случай, если это поможет другим.