laminas-api-tools / api-tools-doctrine

Laminas API Tools Doctrine module
https://api-tools.getlaminas.org/documentation
BSD 3-Clause "New" or "Revised" License
10 stars 21 forks source link

Null ObjectManager in DoctrineResource #14

Closed mesl1012 closed 4 years ago

mesl1012 commented 4 years ago

Hello @TomHAnderson, Hello there again, i have tried what you suggested using phpro and downgrading my doctrine module and orm.

i have this configuration but when i consume this.. i receive an server 500 error

'api-tools' => array(
        'doctrine-connected' => array(
            'FeelGoodAPI\\V1\\Rest\\Company\\CompanyResource' => array(
                'object_manager' => 'doctrine.entitymanager.orm_default',
                'hydrator' => 'FeelGoodAPI\\V1\\Rest\\Company\\CompanyHydrator',
            ),

the error is "Call to a member function getClassMetadata() on null and i have traced this error to the DoctrineResource.php method findEntity(); It seems to be the object manager is not set and returns a null value. https://github.com/laminas-api-tools/api-tools-doctrine/blob/master/src/Server/Resource/DoctrineResource.php#L717

the cache config shows that the factory is being called

'abstract_factories' => 
    array (
      0 => 'Laminas\\Di\\Container\\ServiceManager\\AutowireFactory',
      1 => 'Laminas\\Log\\LoggerAbstractServiceFactory',
      2 => 'Laminas\\Log\\PsrLoggerAbstractAdapterFactory',
      3 => 'Laminas\\Db\\Adapter\\AdapterAbstractServiceFactory',
      4 => 'Laminas\\Session\\Service\\ContainerAbstractServiceFactory',
      5 => 'Laminas\\Form\\FormAbstractServiceFactory',
      6 => 'Laminas\\Cache\\Service\\StorageCacheAbstractServiceFactory',
      'DoctrineModule' => 'DoctrineModule\\ServiceFactory\\AbstractDoctrineServiceFactory',
      7 => 'Laminas\\Db\\Adapter\\AdapterAbstractServiceFactory',
      8 => 'Laminas\\ApiTools\\DbConnectedResourceAbstractFactory',
      9 => 'Laminas\\ApiTools\\TableGatewayAbstractFactory',
      10 => 'Laminas\\ApiTools\\Doctrine\\Server\\Resource\\DoctrineResourceFactory',
    ),

here is my composer.json

"php": "^7.1",
        "laminas/laminas-component-installer": "^1.0 || ^2.1",
        "laminas/laminas-mvc": "^3.1.1",
        "laminas/laminas-cache": "^2.9.0",
        "laminas/laminas-db": "^2.10.0",
        "laminas/laminas-mvc-form": "^1.0",
        "laminas/laminas-json": "^3.1.2",
        "laminas/laminas-log": "^2.11",
        "laminas/laminas-mvc-console": "^1.2.0",
        "laminas/laminas-mvc-i18n": "^1.1.1",
        "laminas/laminas-mvc-plugins": "^1.0.1",
        "laminas/laminas-psr7bridge": "^1.2.0",
        "laminas/laminas-session": "^2.9.1",
        "laminas/laminas-di": "^3.1.1",
        "laminas/laminas-crypt": "^3.3",
        "laminas/laminas-authentication": "^2.7",
        "slm/locale": "^0.4.1",
        "laminas/laminas-permissions-rbac": "^3.0",
        "laminas/laminas-serializer": "^2.9",
        "gedmo/doctrine-extensions": "^2.4",
        "doctrine/data-fixtures": "^1.4",
        "laminas/laminas-test": "^3.4",
        "laminas/laminas-captcha": "^2.9",
        "laminas-api-tools/api-tools": "~1.0",
        "phpro/zf-doctrine-hydration-module": "^4.1",
        "laminas-api-tools/api-tools-doctrine": "^2.3",
        "doctrine/doctrine-orm-module": "^1.1"
mesl1012 commented 4 years ago

i have found the problem with this one, the module is not compatible with the laminas-di module, It seems like it doesn't load the doctrineresource class which uses abstract factories to be injected. I am now using laminas-servicemanager-di to auto load my injections. Hope this could help.

TomHAnderson commented 4 years ago

@mesl1012 I'm glad you figured it out. The old Apigility tools rely heavily on the service manager. You can close this.