Zend framework2 Zend Framework 2,事件管理器,SharedManager,表单初始化

Zend framework2 Zend Framework 2,事件管理器,SharedManager,表单初始化,zend-framework2,Zend Framework2,我已将事件添加到onBootstrap()中 $e->getApplication()->getEventManager()->getSharedManager()->attach('\Application\Form\Presentation\Edit',init',function($e){ 退出(打印(“”).var_转储($e)); }, 1); 如何在调用form method init后运行此事件?我有一个解决方案 在onBootstrap()中 形式: $event = new

我已将事件添加到onBootstrap()中

$e->getApplication()->getEventManager()->getSharedManager()->attach('\Application\Form\Presentation\Edit',init',function($e){
退出(打印(“”).var_转储($e));
}, 1);
如何在调用form method init后运行此事件?

我有一个解决方案

在onBootstrap()中

形式:

$event = new EventManager('PresentationEdit');
$event->trigger('init', $this);
在init方法中:


它可以工作,但这是正确的方法吗?

是的,这是一种正确的方法,但我建议您在简单的任务上使用事件,如
updatePost
removePost
或其他。不要用事件风暴淹没应用程序—这会降低应用程序的整体可读性
    $services = $e->getApplication()->getServiceManager();
    $sharedEventManager = $e->getApplication()->getEventManager()->getSharedManager();

    $sharedEventManager->attach('PresentationEdit','init', function($event) use ($services) {
        $form = $event->getTarget();
        $form->add(array(
            'type' => '\Zend\Form\Element\Text',
            'name' => 'title2',
            'attributes' => array(
               'type'  => 'text',
               'class' => 'form-control',
                'autocomplete' => 'off',
            ),
            'options' => array(
                'label' => 'presentation.title',
            )
        ));
    }, 100);
use Zend\EventManager\EventManager;
$event = new EventManager('PresentationEdit');
$event->trigger('init', $this);