Magento 2 Class * Фабрика не існує


15

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

Клас Magento \ Продажі \ Модель \ ResourceModel \ Звіт \ OrderFactory не існує

Деякі з класів створюються, але не всі. Я знову спробував очистити кеш-пам'ять і папку генерації, але потім я отримую ті самі помилки.

Будь-які ідеї?


1
перевірити права на папку var / generation
Marius

там написано drwxrwxrw- 5
jstrez77

Мені довелося кілька разів очистити папку var / genera, перейти на домашню сторінку спочатку на очищення, потім на адміністратор, потім увійти, потім очистити ... і це спрацювало ... ?? Я цього не розумію
jstrez77

Однозначно дозволи в папці 'var / generation'.
Travis van der Font

Відповіді:


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який створив усі необхідні класи.

(у моєму випадку: Тоді у мене виникли проблеми з кешем, я видалив початкову папку кешу.)

Тоді це вирішило моє питання. Ура !!


1
потрібно змінити власника файлів наприкінці
moshe beeri

5

У magento нові версії на зразок 2.2.2 і вище цей шлях генерації коду змінено на

<Magento root folder>/generated

тому вам потрібно перевірити дозволи і для цієї папки. Вам потрібно виконати наступну команду в корені каталогу Magento, щоб вирішити цю проблему:

sudo chmod -R 777 generated/

очистити кеш, а також на початку
Хассан Алі Шахзад

його робота для мене
ранковий

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 *

1

Надайте дозвіл 777 та змініть право власності на www-data згенерованої / папки коду, а потім запустіть команду sudo php bin/magento setup:di:compileочищення кешу та розгортання вашої проблеми вирішено


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.by "використовувати"

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/назва вашого модуля) свого плагіна в браузері, ніж Magento генерує код для вашого модуля, як показано нижче:

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

У вашому випадку вам потрібно перевірити, чи використовується "CustomerFactory" і "OrderFactory", як зазначено вище, чи ні.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.