php zend-framework zend-form zend-view

php - zend_form ViewScript decorator/passing arguments



zend-framework zend-form (3)

Hay otras dos formas posibles de lograr agregar un icono dentro de un formulario, que creo que deberías considerar,

Una sería agregar su propio tipo de elemento y agregar un decorador personalizado para el ícono (hago esto para agregar íconos simples: la ayuda siguiente o los buscadores de archivos para formar elementos). Este es un asunto bastante simple de hacer.

El otro sería simplemente agregar un decorador HtmlTag a su elemento, al que puede especificar los atributos como src como opciones.

Estas dos soluciones en realidad vienen con otro beneficio oculto además de simplificar la administración de las cosas, también eliminan el uso del asistente de vista parcial, que se usa una vez para cada decorador de vistas en uso.

El asistente de vista parcial puede agregar inmensamente a la memoria y al tiempo general de su formulario (que ya es bastante grande por cierto), ¡esto se agrava cuando usa el decorador de viewscript en elementos en lugar de todo el formulario!

Tengo un formulario que se extiende desde Zend_Form. Estoy colocando el formulario en un decorador de ViewScript como este:

$this->setDecorators(array(array(''ViewScript'', array(''viewScript'' => ''game/forms/game-management.phtml''))));

Me gustaría pasar una variable a este ViewScript, pero no estoy seguro de cómo se podría hacer esto.

Dado que el parcial se representa como Zend_View (lo que permite $ this-> app_store_icon para el renderizado), parece que debería haber una forma de pasar las variables a renderizar. Intenté lo siguiente, pero fue en vano.

$this->setDecorators(array(array(''ViewScript'', array(''viewScript'' => ''game/forms/game-management.phtml''),array(''app_store_picon''=>$current_app_store_picon))));

Cualquier ayuda sobre cómo hacer esto sería apreciada.

Gracias


Este es un poco complicado, me tomó alrededor de media hora para resolverlo, pero se puede hacer :)

El punto es que está pasando las opciones al decorador de ViewScript y no al elemento. Agregar la opción:

$this->setDecorators(array(array(''ViewScript'', array( ''viewScript'' => ''test.phtml'', ''foo''=>''baz'', ))));

o una variedad de opciones:

$this->setDecorators(array(array(''ViewScript'', array( ''viewScript'' => ''test.phtml'', array( ''foo''=>''baz'', ''spam''=>''ham'', ), ))));

Obteniendo eso en el test.phtml parcial:

$option = $this->element->getDecorator(''ViewScript'')->getOptions();

En el primer caso, con una opción aprobada será $option[''foo''] y en el segundo será $option[0][''foo'']

HTH :)


Necesitaba pasar un código html que indica un estado de puntaje al archivo viewscript.phtml. Encontré una manera más simple que pasarla junto con el decorador, que es pasando el valor de la acción del controlador como si lo estuviera pasando al script de vista zend normal. p.ej:

<Controller> // pass status and score to view $this->view->status = $this->_sitenamehelper->get_status($id); $this->view->score = $this->_sitenamehelper->get_score($id); <viewscript.phtml partial file> <?php $form = $this->element; ?> <b>Status: </b><?php echo $form->getView()->status; ?> <b>Score: </b><?php echo $form->getView()->score; ?>

Y allí puedes pasar cualquier código renderizado en html ... supongo que funcionaría para los iconos ...

Mohannad