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 не может найти мой класс?

Author: Teja Bhagavan Kollepara, 2017-07-21

6 answers

Я в своем деле,

enter image description here

На самом деле у меня была синтаксическая ошибка в конструкторе. но это не было показано как обычные ошибки с номером строки. Я побежал,

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

Это может быть полезно.

 7
Author: Ajwad Syed, 2020-03-13 09:30:22

Вы можете попробовать использовать

setup:di:compile

Команда.

Также попробуйте удалить var/кэш/*var/кэш страниц/*var/генерация/*

И запустить

setup:upgrade

Команда.

 1
Author: Illia Arefyev, 2017-07-21 15:12:34

Оказывается, в этом конкретном файле я открыл тег <? вместо тега <?php. Я не уверен, была ли это более новая версия WAMP или PHP, которая вызвала такую чувствительность, но использование <?php устранило проблему!

 1
Author: andyjv, 2017-07-21 19:28:33

Я решаю эту проблему, надеюсь, кто-нибудь получит помощь

  • Компакт-диск magento2.3.x

    Найти сгенерированный var паб поставщика/статический паб/медиа-приложение/и т. Д. - тип f-exec chmod g+w {}+

    Найти сгенерированный var паб поставщика/статический паб/медиа-приложение/и т. Д. - тип d-exec chmod g+ws{}+

    Chown -R: www-данные.

    Chmod u+x bin/magento

 1
Author: matinict, 2020-02-29 16:19:57

Войдите на свой сервер и компакт-диск в корневой каталог Magento и запустите:

php bin/magento setup:di:compile
 0
Author: sparksmedia, 2019-06-20 22:39:40

Я обнаружил, что это может быть результатом строгого типа PHP:

declare(strict_types=1);

Я удалил это в своем пользовательском модуле, на случай, если это поможет другим.

 0
Author: Chris Rogers, 2020-05-18 07:44:58