2010-03-17 17 views
26

¿Podría alguien dar algunos consejos y/o ejemplos de cómo los complementos del Controlador y los Ayudantes de Acción son diferentes? ¿Hay situaciones en las que una tarea particular se podría lograr con una pero no con otra? Para mí ambos se ven más o menos iguales y a menudo tengo problemas para decidir cuándo usar qué ... ¿Hay grandes diferencias?Zend Framework: Complementos del Controlador vs Ayudantes de Acción

Respuesta

29

Los complementos del controlador se pueden enganchar en cualquier controlador en cualquier punto del proceso de enrutamiento (preDispatch postDispatch, routeStartup, routeShutdown) lo que los hace aptos para proporcionar funciones detrás de la escena como el cumplimiento de ACL.

Los Ayudantes de acción son para segmentos reutilizables pero opcionales a los que su controlador podría necesitar acceder (redirector, flashMessenger).

Por lo tanto, si está creando un fragmento de código reutilizable que siempre necesita ejecutarse a sí mismo, utilice un complemento de controlador; de lo contrario, es probable que desee una acción de ayuda.

+8

Solo para tener en cuenta que los controladores de acción también se pueden ejecutar a sí mismos ya que tienen ganchos preDispatch() y postDispatch(). ActionHelperBroker se usa para controlar esto. –

14

Se puede pensar de esta manera:

  • ayudantes de acción se utilizan para agregar métodos a los controladores.
  • Los complementos del controlador se utilizan para agregar la lógica de enrutamiento/despacho a los controladores.

Así que pregúntate, ¿tengo un método que me gustaría poder llamar desde todas las acciones en mi controlador? ¿O necesito agregar lógica al proceso de enrutamiento/envío?

También puede ver el Built in Action Helpers.

2

Los ayudantes de acción también tienen acceso al objeto de control real que se está ejecutando. Los complementos del controlador solo tienen acceso al FrontController y, por lo tanto, solo el controlador y el nombre de la acción.

Cuál usted utiliza depende de qué contexto usted necesita. Si necesita acceder a un objeto de vista conectado a un controlador, por ejemplo, querrá un Ayudante de acción.

6

Una imagen para ilustrar la diferencia entre plugins y ayudantes de acción: ZF Sequence Flow

0

Nótese también que, en el proceso del ciclo de vida controlador frontal, los plugins obtener el control (o invocado) primero de los ayudantes de acción.

Cuestiones relacionadas