2012-08-13 15 views
6

W Zendframework 1 używamy metody init() do inicjowania rzeczy w kontrolerze. Widziałem, że jest to usunięte z zenframework 2. Dlaczego? i jaki jest najlepszy sposób na osiągnięcie tego samego w Zf 2. Aktualizuję mój poprzedni projekt opracowany w Zf1 i widzę, że rzeczy zmieniły się bardzo w zf2, jak w przypadku zf1.metoda init w kontrolerze zf2

Czy jest jakaś inna zmiana w zf2, w jaki sposób używamy innych metod, takich jak preDispatch() i postDispatch() w zf1?

Ktoś to przeszedł?

Odpowiedz

12

W kontrolerach zf2 są natychmiastowe przez ControllerLoader, który jest podklasą ServiceManager. Jeśli chcesz zainicjować kontroler, użyj opcji Factory lub __construct. Użyj __construct w celu uproszczenia inicjalizacji i użyj Factory, jeśli kontroler zużywa inne obiekty, które muszą zostać wstrzyknięte.

preDispatch i postDispatch również nie działają na rzecz nowego systemu wydarzeń. Aby uzyskać ten sam wynik w zf2, zarejestruj procedury obsługi zdarzeń zdarzeń disptach i render. Aby uzyskać pełną listę MVC envents zobaczyć http://akrabat.com/zend-framework-2/a-list-of-zf2-events/

Również spojrzeć tutaj na przykład utworzenie fabryki kontrolera ZF2 how to get entity Manager from outside of controller

+4

Oprócz akrabats pełna lista wydarzeń blog Matthew W.O'Phinney http://mwop.net/blog/2012-07-30-the-new-init.html – Sam

+0

Dzięki sam, ten link jest naprawdę pomocny. – Developer

8

myślę, że można to kropla w kontrolerze i będzie działać.

public function onDispatch(MvcEvent $e) 
+0

to jest odpowiedź, która mi się podobała. – Ismael

+0

Jezu dzięki, dlaczego wszystko jest tak zawiłe w ZF2 – Jonathan

0

Ponieważ PO wymienia postDispatch, warto zauważyć, że __destruct teraz działa w podobny sposób. Jedną dużą różnicą jest jednak to, że wykonanie nie może być powstrzymane (na przykład poprzez exit;) przed zniszczeniem Obiektu.

Powiązane problemy