Содержание


Debugging


Debugging, отладка, DI, ЗФ2, Zend Framework 2, ZF2, ру, ru




Отладка DiC

 

Есть возможность просмотреть дамп (dump) информации, хранящейся в «Definition» и «InstanceManager» для экземпляра DI.

 

Самый простой способ это:

 ZendDiDisplayConsole::export($di);

При использовании «RuntimeDefinition» можно просмотреть информацию нужного определения (definition) при первом вызове:

 ZendDiDisplayConsole::export($di, array('AClassIWantToGetTheDefinitionFor'));

Общее использование

 

Interface Injection

namespace FooBar {
    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 ZendDiDi;
    $baz = $di->get('FooBarBaz');
}

Setter Injection with Class Definition

namespace FooBar {
    class Baz {
        public $bam;
        public function setBam(Bam $bam){
            $this->bam = $bam; 
        }
    }
    class Bam {
    }
}
 
namespace {
    $di = new ZendDiDi;
    $di->configure(new ZendDiConfig(array(
        'definition' => array(
            'class' => array(
                'FooBarBaz' => array(
                    'setBam' => array('required' => true)
                )
            )
        )
    )));
    $baz = $di->get('FooBarBaz');
}

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 ApplicationBlock {}
    class BlockTwo implements ApplicationBlock {}
}
 
namespace {
    include 'zf2bootstrap.php';
    $di = new ZendDiDi;
    $di->configure(new ZendDiConfig(array(
        'definition' => array(
            'class' => array(
                'ApplicationPage' => array(
                    'addBlock' => array(
                        'block' => array('type' => 'ApplicationBlock', 'required' => true)
                    )
                )
            )
        ),
        'instance' => array(
            'ApplicationPage' => array(
                'injections' => array(
                    'MyModuleBlockOne',
                    'MyModuleBlockTwo'
                )
            )
        )
    )));
    $page = $di->get('ApplicationPage');
}

Автор статьи: DuB