Skip to content

Instantly share code, notes, and snippets.

@Ocramius
Created November 12, 2011 13:42
Show Gist options
  • Save Ocramius/1360533 to your computer and use it in GitHub Desktop.
Save Ocramius/1360533 to your computer and use it in GitHub Desktop.
Zend\Db adapter instantiation through Zend Framework 2 Di
<?php
return array(
'di' => array(
'definition' => array(
//teaching DI to use the factory
'class' => array(
'Zend\Db\Db' => array(
'methods' => array(
'factory' => array(
'adapter' => array(
'type' => false,
'required' => true,
),
'config' => array(
'type' => false,
'required' => false,
),
),
),
),
'Zend\Db\Adapter\AbstractAdapter' => array(
'instantiator' => array(
'Zend\Db\Db',
'factory',
),
),
),
),
'instance' => array(
'alias' => array(
//we just know it's an abstract adapter
'my-db-adapter' => 'Zend\Db\Adapter\AbstractAdapter',
),
//documentmanager
'my-db-adapter' => array(
'parameters' => array(
'adapter' => array(
// same db factory parameters you used in 1.x (I suppose)
),
),
),
),
),
);
@Ocramius
Copy link
Author

If you have multiple defined, yes. Otherwise, if you typehint your methods correctly, like following:

    public function __construct(My\Stuff $stuff) {
        $this->stuff = $stuff;
    }

Then, if you defined an alias 'my-stuff' for an instance of type My\Stuff, you could just use Zend\Di\Configuration option 'preference', like following, you should not be worried about defining injections manually every time:

return array(
    'instance' => array(
        'alias' => array(
            'my-stuff' => 'My\Stuff',
        ),
        'preference' => array(
            'My\Stuff' => 'my-stuff', //this will tell Zend\Di to use alias 'my-stuff' when no alias is requested, but an instance of My\Stuff is needed
        ),
    ),
);

That is just an example config. You can find more examples about Zend\Di at https://github.com/ralphschindler/Zend_DI-Examples

@andrew13
Copy link

Awesome thanks for the help!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment