2009-06-02 15 views
10

Estoy trabajando en la construcción de una interfaz que quiero que funcione como una función de "exploración con pestañas". Cada una de estas pestañas ya se ha escrito como una acción y la interfaz con pestañas funciona bien como enlaces a las pestañas individuales. Decidí intentar escribir la página de "índice" para este controlador, colocando el contenido de todas las pestañas en divisiones ocultas e intercambiándolas con jQuery, pero una vez que comencé a utilizar la acción ver ayudante, me encontré con mucha gente diciendo que es una mala práctica (see this article)Action View Helper en Zend: ¿funciona?

Algunas de estas acciones crean formularios: obtenga algunos datos del modelo, etc. para mostrar. Quiero que cada una de las acciones continúe funcionando por sí mismo (algunas formas de análisis también).

Navegar a/elemento debe darle el menú con pestañas, más todos los contenidos del div en una etiqueta oculta - donde/elemento/pestaña2 es una acción específica (formulario de envío, por ejemplo).

Otra complicación/advertencia: algunas de las acciones arrojarán excepciones de acceso si el usuario no tiene acceso a esa "pestaña". Preferiría no crear la verificación de acceso en el sistema dos veces (mostrando así una pestaña con contenido vacío).

Estoy tratando de descubrir cuál es la mejor práctica para manejar este tipo de cosas, y pensé que la acción de ayuda podría ser. Si trato de usar View Helpers, empiezo a preguntarme si ese es el lugar correcto para armar un Zend_Form.

¿Alguien tiene alguna sugerencia sobre la forma "correcta" de evitar el uso del Zend_View_Helper_Action?

Respuesta

7

la forma correcta de evitar la vista ayudante de acciones, como he dicho en el artículo de usted ha citado, es la creación de los parciales, que acceda al modelo directamente para buscar los datos que necesitan. Esto puede ser a través de un asistente de visualización (lo haces tú mismo;)) si esto implicara mucha lógica en tu vista.

El action view helper está plagado de más que solo problemas de rendimiento, pero también crea horribles pesadillas de depuración, y si lo necesita, entonces su aplicación probablemente no está siguiendo MVC, y por lo tanto, está usando el controlador para reutilizar, en lugar del modelo, que es la intención de los patrones.

Puede representar parciales desde su diseño o vista de acciones actuales con el procesamiento o métodos parciales del objeto de vista.

Si tiene varias acciones para tratar múltiples entradas posibles de sus pestañas, debe configurar todas estas acciones para representar el mismo script de vista, que luego procesará todas las pestañas con datos directamente del modelo.

1

Si no está generando las pestañas/pestañas del marcado existente, y está cargando el contenido según demanda, simplemente debe verificar si el usuario tiene permiso para acceder a la pestaña antes de mostrar la pestaña en sí, y de nuevo cuando intenta cargar el contenido de la pestaña.

Comprobar si el usuario tiene estos permisos de acceso debe ser un modo aceptable de operación y no debe ser costoso de realizar.

Si estas acciones producen contenido que funciona en una página independiente, además de las pestañas, entonces el asistente de vista de acción es la manera correcta de proceder. Simplemente realice la misma verificación de ACL (u otra) realizada en la acción al generar la pestaña.

1

No estoy totalmente seguro de lo que su problema es exacta, sin embargo se puede deshabilitar el diseño:

$this->_helper->layout->disableLayout(); 

entonces la acción solicitada se acaba de mostrar que es script de vista, que se puede cargar en la pestaña.

Cualquier código de autorización que tenga funcionará normalmente y puede mostrar el script de vista solicitado para la Acción, o no dependiendo de si tienen acceso.

0

Puede capturar las excepciones de acceso mediante el uso de un bloque try/catch:

try { // action throwing exceptions } catch (Exception $e) { // catch silently } 
+0

En realidad, muchas otras cosas se ensucian al hacer esto con el asistente de visualización de acción. Envié una corrección de error en JIRA – gnarf

Cuestiones relacionadas