Класс Laminas (бывший Zend Framework 3) не найден, разрешающая фабрика - PullRequest
0 голосов
/ 17 марта 2020

Я потерян с этой проблемой ...

У меня есть модуль Таблицы с фабрикой для моего последнего класса "Entreprise"
, поэтому в module/Tables/config/module.config.php

<?php
    namespace \Tables\Service\Factory;

    use Interop\Container\ContainerInterface;
    use Laminas\ServiceManager\Factory\FactoryInterface;
    use Tables\Service\Entreprise;


    class EntrepriseFactory  implements  FactoryInterface 
    {    
             public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
             {
                DIE('FACTORY ENTREPRISE NOT REACHED ... :-( ');
                $entreprise = new Entreprise(); 
                return $enteprise;
             }
}

module / Tables / Modules. php

<?php
namespace Tables;



class Module
{
    public function getServiceConfig()
    {
     return [
        'factories' => [
            'EntrepriseTableGateway' => function ($sm)
                    {
                        ...
                        ...
                        $e=$sm->get(\Service\Entreprise::class);    
                        // Here is the problem
                        // \Service\Entreprise is resolved
                        // as Tables\Service\Factory\EntrepriseFactory as expected
                        // but Tables\Service\Factory\EntrepriseFactory is not found...

вот заводской поток
----module/Tables/src/Tables/Service содержит Entreprise. php (но проблема здесь не в это время)

----/module/Tables/config/module.config.php

<?php
 return array(
   'service_manager' => [
        // the resolution works...
        // but the final class is not found...
        'invokables' => [
           Service\Entreprise::class =>  \Tables\Service\Factory\EntrepriseFactory::class,
        ]

   ]
);

модуль / Таблицы / src / Таблицы / Сервис / Фабрика. php

<?php
namespace \Tables\Service\Factory;

use Interop\Container\ContainerInterface;
use Laminas\ServiceManager\Factory\FactoryInterface;
use Tables\Service\Entreprise;


class EntrepriseFactory  implements  FactoryInterface
{
    public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
     {
        DIE('FACTORY ENTREPRISE NOT REACHED !!!');
        $entreprise = new Entreprise(); 
        return $entreprise;
     }
 }

in composer.json (composer dump-autoload готово)

...
      "autoload": {
            "psr-4": {
                "Application\\": "module/Application/src/",
                "Tfirst\\": "module/Tfirst/src/",
                "Tables\\": "module/Tables/src/"
            }
        },
...

и в root конфиг в SERVER/config/modules.config.php

...
return [
    'Laminas\Db',
    'Laminas\Di',
    'Laminas\Mvc\Plugin\FilePrg',
    'Laminas\Mvc\Plugin\FlashMessenger',
    'Laminas\Mvc\Plugin\Identity',
    'Laminas\Mvc\Plugin\Prg',
    'Laminas\Session',
    'Laminas\Mvc\I18n',
    'Laminas\Mvc\Console',
    'Laminas\Form',
    'Laminas\Hydrator',
    'Laminas\InputFilter',
    'Laminas\Filter',
    'Laminas\I18n',
    'Laminas\Cache',
    'Laminas\Router',
    'Laminas\Validator',
    'Application',
    'Tables',
    'Tfirst',
......

и дамп ошибки

  Error
    File:
    /home/vagrant/Code/yeting/SERVER/vendor/laminas/laminas-servicemanager/src/Factory/InvokableFactory.php:31
    Message:
    Class 'Tables\Service\Factory\EntrepriseFactory' not found
    Stack trace:
    #0 /home/vagrant/Code/yeting/SERVER/vendor/laminas/laminas-servicemanager/src/ServiceManager.php(765): Laminas\ServiceManager\Factory\InvokableFactory->__invoke()
    #1 /home/vagrant/Code/yeting/SERVER/vendor/laminas/laminas-servicemanager/src/ServiceManager.php(201): Laminas\ServiceManager\ServiceManager->doCreate()
    #2 /home/vagrant/Code/yeting/SERVER/module/Tables/src/Module.php(246): Laminas\ServiceManager\ServiceManager->get()

... любой совет?

1 Ответ

0 голосов
/ 18 марта 2020

хорошо ... я нашел свою ошибку ...

На самом деле, я смешал структуру каталогов старой школы Zend 2 с новым учебником Zend 3 (а теперь и с Laminas), поэтому пространства имен были неправильными.

до исправления: Моя структура структуры была:
(ie для модели:) modules/Tables/src/Tables/Model

новая структура
(ie для модели:) modules/Tables/src/Model То же самое для Factory, et c ...

Всегда есть ошибки, но это другая проблема ...

Я закрываю вопрос.

...