Magento 2 Class * Фабрика не существует

15

Я пытался установить плагин, и я удалил var / generation и var / cache / *. Я проверил MAGE_MODE и являюсь разработчиком, но теперь, когда я получаю доступ к интерфейсу и администратору, я получаю случайные ошибки, говорящие о таких вещах, как: Class Magento\Customer\Model\CustomerFactory does not exist

Класс Magento \ Sales \ Model \ ResourceModel \ Report \ OrderFactory не существует

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

Есть идеи?

jstrez77
источник
1
проверьте права на папку var / generation
Marius
там написано drwxrwxrw- 5
jstrez77
Мне пришлось несколько раз почистить папку var / generation, зайти сначала на домашнюю страницу, очистить, потом admin, затем войти, затем очистить ... и все заработало ... ?? Я не понимаю этого
jstrez77
Определенно разрешения в папке 'var / generation'.
Трэвис ван дер Фонт

Ответы:

21

Magento 2 генерирует фабричные классы внутри var/generationкаталога. Таким образом, если существует проблема с правами доступа к папке или владельцем папки с этим каталогом, то фабричный класс не может быть сгенерирован, и вы получаете такую ​​ошибку.

Когда вы очистите var/generationкаталог и установите для него соответствующее разрешение, эта ошибка должна быть устранена.

Подробнее о генерации кода в Magento 2

Мукеш Чапагейн
источник
Может быть также var/diили var/cache, см. Devdocs.magento.com/guides/v2.2/install-gde/trouble/…
Иван
10

Для меня я удалил var/generationпапку, затем я запустил, magento setup:di:compileкоторый сгенерировал все необходимые классы.

(в моем случае: тогда я столкнулся с проблемой кеша, я удалил исходную папку кеша.)

Тогда это решило мою проблему. Ура !!

Suman KC
источник
1
нужно было поменять владельца файла в конце
moshe beeri
5

В новых версиях magento, таких как 2.2.2 и выше, этот путь генерации кода изменен на

<Magento root folder>/generated

поэтому вам необходимо проверить разрешения для этой папки. Вам нужно выполнить следующую команду в корне установочного каталога Magento, чтобы решить эту проблему:

sudo chmod -R 777 generated/
Хасан Али Шахзад
источник
очистить кеш в начале
Хасан Али Шахзад
его работа для меня
matinict
1

Следующие команды необходимы для выполнения:

sudo php -f bin/magento setup:di:compile 

sudo rm -rf pub/static/*/*; sudo rm -rf var/*/*; 
sudo php -f bin/magento setup:static-content:deploy -f  

sudo php bin/magento cache:clean

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

sudo chmod -R 777 *
Agilox
источник
1

Дайте разрешение 777 и смените владельца на www-data сгенерированной папки / code, а затем запустите команду sudo php bin/magento setup:di:compileclear cache и бум, ваша проблема решена

Мухаммед Музаммил
источник
1

Это просто <magento-root>/var/проблема с разрешением папки.

Выполните команду ниже, используя режим CLI

sudo chmod -R 777 var/
Анвар
источник
0

Magento 2 создает классы фабрики в var/generationпапке, и если вы добавляете новый параметр в свой __construct()класс, а его класс Factory не существует, то Magento 2 выдает вышеуказанное сообщение об ошибке. Несмотря на то, что есть несколько решений, которые уже дают на ваш вопрос, я могу предложить вам другое решение, которое не требует очистки папки вашего поколения. Пожалуйста, используйте приведенную ниже команду после внесения любых изменений, связанных с классами Factory:

bin/magento setup:di:compile

Эта команда может быть более полезна на производственном сервере.

Сурабх Кумар Шарма
источник
-2

Класс ... Завод не существует означает, что класс вашей модели не загружен. Так как Magento 2 основан на модульном программировании, нам нужно указать класс модели, который мы хотим использовать явно. Мы можем использовать наш модельный класс в двух типах:

1. «использовать»

use Magento\Customer\Setup\CustomerSetupFactory;

public function __construct(CustomerSetupFactory $customerSetupFactory)
{
    $this->customerSetupFactory = $customerSetupFactory;
}
  1. непосредственно

    public function __construct(Magento\Customer\Setup\CustomerSetupFactory $customerSetupFactory){
    
    $this->customerSetupFactory = $customerSetupFactory;
    
    }

Когда вы нажимаете на URL ( http://domain.com/your module frontname) вашего плагина в браузере, Magento генерирует код для вашего модуля, как показано ниже:

\var\generation\Your Vendor Directory\Your Module Directory\Controller
\var\generation\Your Vendor Directory\Your Module Directory\Model

В вашем случае вам нужно проверить, что «CustomerFactory» и «OrderFactory» используется в вышеуказанном формате или нет.

Суман Сингх
источник