rafaame
rafaame

Reputation: 822

Zend Framework 2 + Doctrine 2 and Authentication Service

It was successfully working before I changed the authentication service name from 'orm_default' to 'admin', and it is necessary since I have more modules which uses more authentication services.

The problem is I'm getting the following error:

Fatal error: Uncaught exception 'Zend\ServiceManager\Exception\ServiceNotFoundException' with message 'Zend\ServiceManager\ServiceManager::get was unable to fetch or create an instance for doctrine.authenticationservice.admin'

My module.config.php

'doctrine' => array
(

'driver' => array
(

    __NAMESPACE__ . '_driver' => array
    (

        'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
        'cache' => 'array',
        'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity')

    ),

    'orm_default' => array
    (

        'drivers' => array
        (

            __NAMESPACE__ . '\Entity' => __NAMESPACE__ . '_driver'

        ),



    )

),

'authentication' => array
(

    'admin' => array
    (

        'object_manager' => 'Doctrine\ORM\EntityManager',
        'identity_class' => __NAMESPACE__ . '\Entity\User',
        'identity_property' => 'email',
        'credential_property' => 'password',
        'credentialCallable' => __NAMESPACE__ . '\Model\User::hashPassword'

    ),

),

),

My Module.php

public function getServiceConfig()
{
    return array
    (
        'factories' => array
        (

            'Admin\Auth' => function($sm)
            {

                return $sm->get('doctrine.authenticationservice.admin');

            },

            'Admin\Form\Auth\Login' => function($sm) 
            {

                return new Form\Auth\Login();

            },

        ),

    );
}

Upvotes: 1

Views: 2216

Answers (2)

Felix Ongati
Felix Ongati

Reputation: 421

I had exactly same problem when i was working on my project. After working my *ss out for two nights, i solved the problem by simply re-installing the doctrine-orm-module after reading https://github.com/doctrine/DoctrineORMModule, "Registered Service names" section. This simply means doctrine orm module wasn't properly installed, or wasn't installed.

Upvotes: 0

rafaame
rafaame

Reputation: 822

It was confirmed as a bug: https://github.com/doctrine/DoctrineORMModule/issues/291

According to a comment in a doctrine module source file it plans to be fixed in 1.0. In this meantime you can it in your any module.config.php file of your application like this:

    'authentication' =>
    [

        'application' =>
        [

            'object_manager' => 'Doctrine\ORM\EntityManager',
            'identity_class' => 'Application\Entity\Customer',
            'identity_property' => 'email',
            'credential_property' => 'password',
            'credentialCallable' => 'Application\Entity\Customer::hashPassword'

        ],

    ],

    'authenticationadapter' =>
    [

        'application' => true,

    ],

    'authenticationstorage' =>
    [

        'application' => true,

    ],

    'authenticationservice' =>
    [

        'application' => true,
    ]

Upvotes: 2

Related Questions