v2 Documentation
In This Article
Debugging & Complex Use Cases
Version 2
This is documentation for the legacy version (2.x) of zend-di.
Debugging a DiC
It is possible to dump the information contained within both the Definition
and InstanceManager
for a Zend\Di\Di
instance.
The easiest way is to do the following:
Zend\Di\Display\Console::export($di);
If you are using a RuntimeDefinition
where upon you expect a particular
definition to be resolve at the first-call, you can see that information to the
console display to force it to read that class:
Zend\Di\Display\Console::export($di, ['A\ClassIWantTo\GetTheDefinitionFor']);
Complex Use Cases
Interface Injection
namespace Foo\Bar
{
class Baz implements BamAwareInterface
{
public $bam;
public function setBam(Bam $bam)
{
$this->bam = $bam;
}
}
class Bam
{
}
interface BamAwareInterface
{
public function setBam(Bam $bam);
}
}
namespace {
include 'zf2bootstrap.php';
$di = new Zend\Di\Di;
$baz = $di->get('Foo\Bar\Baz');
}
Setter Injection with Class Definition
namespace Foo\Bar
{
class Baz
{
public $bam;
public function setBam(Bam $bam)
{
$this->bam = $bam;
}
}
class Bam {
}
}
namespace {
$di = new Zend\Di\Di;
$di->configure(new Zend\Di\Config([
'definition' => [
'class' => [
'Foo\Bar\Baz' => [
'setBam' => ['required' => true],
],
],
],
]));
$baz = $di->get('Foo\Bar\Baz');
}
Multiple Injections To A Single Injection Point
namespace Application
{
class Page
{
public $blocks;
public function addBlock(Block $block)
{
$this->blocks[] = $block;
}
}
interface Block
{
}
}
namespace MyModule {
class BlockOne implements \Application\Block {}
class BlockTwo implements \Application\Block {}
}
namespace {
include 'zf2bootstrap.php';
$di = new Zend\Di\Di;
$di->configure(new Zend\Di\Config([
'definition' => [
'class' => [
'Application\Page' => [
'addBlock' => [
'block' => [
'type' => 'Application\Block',
'required' => true,
],
],
],
],
],
'instance' => [
'Application\Page' => [
'injections' => [
'MyModule\BlockOne',
'MyModule\BlockTwo',
],
],
],
]));
$page = $di->get('Application\Page');
}
Found a mistake or want to contribute to the documentation? Edit this page on GitHub!