Magento 2 Class * Factory no existe

15

Estaba tratando de instalar un complemento y eliminé var / generation y var / cache / *. Verifiqué el MAGE_MODE y estoy en desarrollador, pero ahora cuando accedo al front-end y al administrador recibo errores aleatorios que dicen cosas malas como: Class Magento\Customer\Model\CustomerFactory does not exist

La clase Magento \ Sales \ Model \ ResourceModel \ Report \ OrderFactory no existe

Algunas de las clases se están creando, pero no todas. Intenté borrar el caché nuevamente y la carpeta de generación, pero luego recibo los mismos errores.

¿Algunas ideas?

jstrez77
fuente
1
verifique los derechos en la carpeta var / generation
Marius
dice drwxrwxrw- 5
jstrez77
Tuve que limpiar la carpeta var / generation varias veces, primero ir a la página de inicio, limpiar, luego administrar, luego iniciar sesión, luego limpiar ... y funcionó ... ?? No entiendo esto
jstrez77
Definitivamente permisos dentro de la carpeta 'var / generation'.
Travis van der Font

Respuestas:

21

Magento 2 genera clases de Factory dentro del var/generationdirectorio. Entonces, si hay un problema de permiso de carpeta o un problema de propietario de carpeta con ese directorio, entonces la clase de fábrica no se puede generar y obtiene ese error.

Cuando borra el var/generationdirectorio y establece el permiso apropiado, entonces este error debe resolverse.

Ver más sobre Generación de código en Magento 2

Mukesh Chapagain
fuente
Podría ser también var/dio var/cache, ver devdocs.magento.com/guides/v2.2/install-gde/trouble/…
Yvan
10

Para mí, eliminé la var/generationcarpeta y luego ejecuté lo magento setup:di:compileque generó todas las clases necesarias.

(en mi caso: luego encontré un problema de caché, eliminé la carpeta de caché inicial)

Entonces resolvió mi problema. Salud !!

Suman KC
fuente
1
necesitaba cambiar el propietario de los archivos al final
moshe beeri
5

En magento, las nuevas versiones como 2.2.2 y superiores cambiaron esta ruta de generación de código a

<Magento root folder>/generated

por lo que también debe verificar los permisos para esta carpeta. Debe ejecutar el siguiente comando en la raíz del directorio de instalación de Magento para resolver este problema:

sudo chmod -R 777 generated/
Hassan Ali Shahzad
fuente
borrar caché también en el inicio
Hassan Ali Shahzad
es trabajo para mí
matinict
1

Los siguientes comandos son necesarios para ser ejecutados:

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

Además, se necesita el permiso adecuado. Si está en producción, debe ejecutar los permisos adecuados. Pero, en la máquina local, puede ejecutar el permiso completo:

sudo chmod -R 777 *
Agilox
fuente
1

Otorgue permiso al 777 y cambie la propiedad a www-data de la carpeta generada / código y luego ejecute el comando sudo php bin/magento setup:di:compileclear cache y aumente su problema está resuelto

Mohammed Muzammil
fuente
1

Es solo un <magento-root>/var/problema de permiso de carpeta.

Ejecute el siguiente comando utilizando el modo CLI

sudo chmod -R 777 var/
Anwar
fuente
0

Magento 2 crea las clases de fábrica en la var/generationcarpeta y si agrega un nuevo parámetro en su __construct()y su clase de Fábrica no existe, entonces Magento 2 arroja el mensaje de error anterior. Aunque ya hay pocas soluciones para su pregunta, puedo sugerirle otra solución que no requiera que borre su carpeta de generación. Utilice el siguiente comando después de realizar cualquier cambio relacionado con las clases Factory:

bin/magento setup:di:compile

Este comando puede ser más útil en el servidor de producción.

Sourabh Kumar Sharma
fuente
-2

Clase ... La fábrica no existe significa que su clase de modelo no está cargada. Como Magento 2 se basa en la programación modular, debemos especificar la clase de modelo donde queremos usarla explícitamente. Podemos usar nuestra clase de modelo en dos tipos:

1.por "uso"

use Magento\Customer\Setup\CustomerSetupFactory;

public function __construct(CustomerSetupFactory $customerSetupFactory)
{
    $this->customerSetupFactory = $customerSetupFactory;
}
  1. Directamente

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

Cuando presiona la URL ( http://dominio.com/ nombre del módulo) de su complemento en el navegador, Magento genera el código para su módulo de la siguiente manera:

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

En su caso, debe verificar que "CustomerFactory" y "OrderFactory" se usen como el formato anterior o no.

Suman Singh
fuente