Primera preDispatch()
se llama para las instancias de Zend_Controller_Plugin_Abstract
. Aquí tiene los objetos de solicitud y respuesta, por lo que puede filtrar la solicitud o hacer alguna preparación utilizando la información de la solicitud.
init()
del Zend_Controller_Action
se denomina siguiente como parte del constructor. Está ahí para ayudarlo a inicializar su controlador, sin tener que anular y repetir la firma del constructor (Zend_Controller_Action::__contruct()
).
El método preDispatch()
del controlador se llama aquí. Puede llamar $request->setDispatched(false)
para omitir la acción actual - no estoy seguro si se puede hacer eso en init()
Luego, su método de acción se llama (viewAction()
por ejemplo). Aquí realiza su trabajo normal, como recuperar elementos del modelo y poblar la vista.
Así la distinción ahora debería estar claro:
- Si quieres algo que debe ejecutarse antes de que todas las acciones - la puso en un plugin y utilizar uno de los ganchos (además
preDispatch()
hay routeStartup
y others),
- si quieres antes de cada acción en un controlador -
init
o preDispatch()
,
- aunque sólo sea por una sola acción - la acción misma.
lo que sucede entre las llamadas init()
y preDispatch()
función?
Casi nada - preDispatch()
se ejecuta, y si no se ha llamado $request->setDispatched(false)
, se ejecuta la acción.
¿Estás hablando de objetos del controlador? –
@Emil: he editado la pregunta. Debería estar claro ahora. – understack