Magento 2 Class * A fábrica não existe


15

Eu estava tentando instalar um plug-in e removi var / generation e var / cache / *. Eu verifiquei o MAGE_MODE e estou no desenvolvedor, mas agora, quando acesso o front-end e o administrador, recebo erros aleatórios dizendo coisas importantes como: Class Magento\Customer\Model\CustomerFactory does not exist

A classe Magento \ Sales \ Model \ ResourceModel \ Report \ OrderFactory não existe

Algumas das classes estão sendo criadas, mas não todas. Tentei limpar o cache novamente e a pasta de geração, mas depois recebo os mesmos erros.

Alguma ideia?


11
verifique os direitos sobre a pasta var / geração
Marius

diz drwxrwxrw- 5
jstrez77

Eu tive que limpar a pasta var / generation algumas vezes, ir para a página inicial primeiro, limpar, depois administrador, depois fazer login e depois limpar ... e funcionou ... ?? Eu não entendo isso
jstrez77

Definitivamente permissões dentro da pasta 'var / generation'.
Travis van der Font

Respostas:


21

Magento 2 gera classes de fábrica dentro do var/generationdiretório. Portanto, se houver um problema de permissão de pasta ou problema de proprietário de pasta nesse diretório, a classe de fábrica não poderá ser gerada e você receberá esse erro.

Quando você limpa o var/generationdiretório e define a permissão apropriada, esse erro deve ser resolvido.

Veja mais sobre geração de código no Magento 2


Pode ser também var/diou var/cache, consulte devdocs.magento.com/guides/v2.2/install-gde/trouble/…
Yvan

9

Para mim, eu removi a var/generationpasta e corri, magento setup:di:compilegerando todas as classes necessárias.

(no meu caso: Em seguida, fui encontrado com um problema de cache, removi a pasta de cache inicial.)

Então ele resolveu meu problema. Felicidades !!


11
necessária para alterar arquivos proprietário no final
Moshe Beeri

5

No magento, novas versões como 2.2.2 e acima desse caminho de geração de código foram alteradas para

<Magento root folder>/generated

então você precisa verificar as permissões para esta pasta também. Você precisa executar o seguinte comando na raiz do diretório de instalação do Magento para resolver esse problema:

sudo chmod -R 777 generated/

limpar o cache, bem no início
Hassan Ali Shahzad

seu trabalho para mim
matinict 24/09/18

1

Os seguintes comandos são necessários para serem executados:

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

Além disso, é necessária a permissão adequada. Se estiver em produção, você precisará executar as permissões apropriadas. Mas, na máquina local, você pode executar permissão total:

sudo chmod -R 777 *

1

Permita 777 e altere a propriedade para www-data da pasta gerada / código e execute o comando sudo php bin/magento setup:di:compilelimpar cache e aumentar o seu problema


1

É apenas uma <magento-root>/var/questão de permissão de pasta.

Execute o comando abaixo usando o modo CLI

sudo chmod -R 777 var/

0

O Magento 2 cria as classes de fábrica na var/generationpasta e se você adicionar um novo parâmetro no seu __construct()e sua classe Factory não existir, o Magento 2 emitirá a mensagem de erro acima. Embora já existam poucas soluções para sua pergunta, posso sugerir outra solução que não exija que você limpe sua pasta de geração. Por favor, use o comando abaixo depois de fazer qualquer alteração relacionada às classes Factory:

bin/magento setup:di:compile

Este comando pode ser mais útil no servidor de produção.


-2

Classe ... A fábrica não existe significa que a classe do modelo não está carregada. Como o Magento 2, baseado em programação modular, precisamos especificar a classe do modelo em que queremos usar explicitamente. Podemos usar nossa classe de modelo em dois tipos:

1.por "use"

use Magento\Customer\Setup\CustomerSetupFactory;

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

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

Quando você bate o URL ( http://domain.com/your módulo frontname) de seu plugin no navegador do que o Magento gerar o código para o seu módulo como a seguir:

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

No seu caso, você precisa verificar se "CustomerFactory" e "OrderFactory" são usados ​​como o formato acima ou não.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.