Created
November 12, 2011 13:42
-
-
Save Ocramius/1360533 to your computer and use it in GitHub Desktop.
Zend\Db adapter instantiation through Zend Framework 2 Di
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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) | |
), | |
), | |
), | |
), | |
), | |
); |
Did you clone the application skeleton? There's a nice tutorial at http://packages.zendframework.com/docs/latest/manual/en/zend.mvc.html
'MyModule\Model\Account' => array(
'parameters' => array(
'adapter' => 'my-db-adapter',
),
),
Does this need to be defined for every model that is used? IE
'Album\Controller\AlbumController' => array(
'parameters' => array(
'albumTable' => 'Album\Model\AlbumTable',
'bandTable' => 'Album\Model\BandTable',
),
),
'Album\Controller\BandController' => array(
'parameters' => array(
'bandTable' => 'Album\Model\BandTable',
),
),
In other words does every controller need to have the Model specified?
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
Awesome thanks for the help!
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Where is $di coming from ?
I've tried:
use Zend\Di\Di as Di;
..... {
$di = new Di();
$db = $di->get('my-db-adapter');
That didn't work
also is there a way to turn on php errors like in zf1:
[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
It's kinda hard to code with no error reporting :)