2014-03-19 3 views
3

ZF2에 대한 책을 읽었으며 Module.php의 함수로 init() 및 onBootStrap()을 모두 참조하므로 모든 페이지로드 중에 호출되므로 가능한 한 가볍습니다. 약간 다른 서명에서 제외젠드 프레임 워크 2의 init()과 onBootStrap()의 차이점은 무엇입니까?

:

init(ModuleManager m) 
onBootStrap(MvcEvent e) 

나는 내가 사용하는시기를 결정하는 데 어려움을 겪고있어, 이는 어떤 이유. 이 책에서는 두 가지 방법 모두 (다른) 이벤트에 연결하는 데 사용됩니다. 누군가 둘 사이의 차이에 대한 명확한 정의를 제공 할 수 있습니까? 그리고 하나는 사용하지만 다른 하나는 사용하지 않는 몇 가지 구체적인 예가 제공 될 수 있습니까?

감사합니다.

+0

onBootStrap (MvcEvent 전자)은 일반적으로 이벤트 및 초기화를 수신 (ModuleManager m) 모듈에 대한. ModuleManager에 이벤트를 추가 할 수 있지만 onBootStrap (MvcEvent e)을 사용하면 이벤트를 추가하는 것이 좋습니다. – cptnk

답변

4

귀하의 질문에 대한 답변은시기와 목적에 달려 있습니다. init() 함수는 항상 onBootstrap() 함수 전에 발생합니다. init()의 목적은 모듈을 초기화하는 것입니다 (예 : 자체 구성 옵션을 사용하여). init()이 주어진 모듈에 대해 실행될 때 다른 모듈이로드되지 않았을 수 있습니다. 그러나 onBootstrap()은 모든 모듈이 초기화 된 후에 실행되며 다른 이벤트를 수신 할 수 있습니다. 이것의

훨씬 더 철저한 설명이 http://framework.zend.com/manual/2.3/en/modules/zend.module-manager.module-manager.html 및 설명서 개인적으로 http://framework.zend.com/manual/2.3/en/modules/zend.module-manager.module-class.html

의 다음 페이지에서 찾을 수 있습니다, 나는 창조적으로 Propel라는 하나 개의 모듈에서 추진 라이브러리를 초기화 할 init()를 사용 http://4zend.com/integrate-propel-orm-with-zend-framework-2/에 기술을 사용하여.

나는 다음과 같이 (사용자가 어떤 리소스에 액세스 할 수 있습니다) 내 액세스 제어 목록을 확인하고 그에 따라 액세스를 제한 할 onBootstrap()를 사용

public function onBootstrap(\Zend\Mvc\MvcEvent $e) { 
    // After the route event occurs, run the checkAcl method of this class 
    $e->getApplication()->getEventManager()->attach('route', array($this, 'checkAcl')); 
} 
+0

건배, 나는 매우 비슷한 결론에 도달했다. onBootstrap()이 호출되기 전에 init()에서 설정된 특정 이벤트 리스너가 실제로 발생했음을 알기 전에 이벤트 리스너가 두 함수에서 연결되는 이유를 이해하려고 애썼다. – Neobyte

관련 문제