2011-05-13 15 views
17
class My_View_Helper_Gender extends Zend_View_Helper_Abstract 
{ 
    public function Gender() 
    { 
    // 
    } 
} 

"The class method (Gender()) must be named identically to the concliding part 
of your class name(Gender).Likewise,the helper's file name must be named 
identically to the method,and include the .php extension(Gender.php)" 
(Easyphp websites J.Gilmore) 

Mi pregunta es: ¿Puede Un ayudante de vista contener más de un método y puedo llamar a otros ayudantes de vista desde el interior de mi ayuda?zend view helper con métodos múltiples?

gracias

Luca

+0

gracias amigo preguntando –

Respuesta

38

Sí, ayudantes pueden contener métodos adicionales. Para llamarlos, debes obtener la instancia de ayudante. Esto se puede lograr ya sea por conseguir una instancia de ayudante en la vista

$genderHelper = $this->getHelper('Gender'); 
echo $genderHelper->otherMethod(); 

o haciendo que el ayudante de volver en sí de la principal método de ayuda:

class My_View_Helper_Gender extends Zend_View_Helper_Abstract 
{ 
    public function Gender() 
    { 
    return $this; 
    } 
    // … more code 
} 

y luego llamar $this->gender()->otherMethod()

Debido Ver Los ayudantes contienen una referencia al Objeto Ver, , puede llamar a cualquier Ayudante de Vista disponible desde View Helper, por ejemplo,

public function Gender() 
{ 
    echo $this->view->translate('gender'); 
    // … more code 
} 
+0

iba a preguntar si podría hacer lo segundo, muy conveniente – Ascherer

+0

El enfoque 'getHelper' no funcionó para mí. Tuve que devolver el objeto en el método principal de ayuda para permitir que se llamaran otros métodos auxiliares. – webkraller

+0

gracias amigo esto ayuda –

0

No existe tal disposición pero puede personalizarla.

Puede ser que pueda pasar el primer parámetro como nombre de función y llamarlo.

p. Ej.

$ this-> CommonFunction ('showGender', $ name)

aquí showGender será función definida en la clase CommonFunction y el nombre $ será parametr

0

Ésta es la modificación de la sugerencia de Gordon para poder utilizar más instancias del ayudante (cada uno con propiedades propias):

class My_View_Helper_Factory extends Zend_View_Helper_Abstract { 
    private static $instances = array(); 
    private $options; 

    public static function factory($id) { 
     if (!array_key_exists($id, self::$instances)) { 
      self::$instances[$id] = new self(); 
     } 
     return self::$instances[$id]; 
    } 

    public function setOptions($options = array()) { 
     $this->options = $options; 
     return $this; 
    } 

    public function open() { 
     //... 
    } 

    public function close() { 
     //... 
    } 
} 

puede utilizar ayudante de esta manera:

$this->factory('instance_1')->setOptions($options[1])->open(); 
//... 
    $this->factory('instance_2')->setOptions($options[2])->open(); 
    //... 
    $this->factory('instance_2')->close(); 
//... 
$this->factory('instance_1')->close(); 

Editar: Este es un patrón de diseño llamado Multiton (como Singleton, pero puede obtener más instancias, una por cada tecla dada).

Cuestiones relacionadas