2011-01-15 11 views
9

Estoy aprendiendo a usar Zend framework y me doy cuenta de que el action helper es algo que podría ser útil. He configurado una instalación predeterminada de Zend en mi máquina, pero no sé a dónde debe ir el archivo auxiliar, qué debo poner en el archivo de arranque y cómo lo uso. ¿Puede alguien señalarme en la dirección correcta, por favor? La guía del usuario de ZF no debe aclararme.Zend Action helper

Gracias John

Respuesta

16

Dos pensamientos de dónde colocar sus ayudantes de acción personalizados:

  1. En una biblioteca personalizada separada
  2. En la carpeta application/controllers/helpers

Estas ideas no son exclusivas. La funcionalidad que es lo suficientemente general como para funcionar en proyectos múltiples probablemente debería incluirse en una biblioteca separada. Pero para la funcionalidad que es específica de la aplicación, existe un argumento de que podría estar en algún lugar de la carpeta application.

@Jurian ya ha descrito el enfoque de "biblioteca separada". Para los ayudantes específicos de la aplicación, puede hacer lo siguiente:

Para una ayuda llamada myHelper, cree una clase Application_Controller_Helper_MyHelper en el archivo application/controllers/helpers/MyHelper.php. En Bootstrap, usted tiene algo así como:

protected function _initAutoload() 
{ 
    $autoloader = new Zend_Application_Module_Autoloader(array(
     'namespace' => 'Application', 
     'basePath' => APPLICATION_PATH, 
    )); 

    Zend_Controller_Action_HelperBroker::addPath(
     APPLICATION_PATH . '/controllers/helpers', 
     'Application_Controller_Helper_'); 

    return $autoloader; 
} 

A continuación, esta persona puede ser invocado en un controlador mediante el uso de:

$this->_helper->myHelper; 

Como se puede ver, esto supone que está utilizando 'Aplicación' appNamespace. De lo contrario, puede (¡debe!) Modificar los nombres de su clase para adaptarse a su circunstancia.

¡Salud!

+0

Pequeña nota, ya que está comenzando la ruta con 'APPLICATION_PATH', su '/ application/controllers/helpers' debería ser solo '/ controllers/helpers' sin'/application' al inicio. También he descubierto que el prefijo ''Application_Controller_Helper_'' no necesariamente tiene que coincidir con la estructura de la carpeta física. Si configura el prefijo (segundo param) como 'Blabla_', siempre que las clases de ayuda de acción comiencen con' Blabla_Helpername' funciona. Esto ayuda a reducir los nombres de las clases si eso es algo que te importa. y por supuesto +1 para una buena respuesta. – jblue

+0

D'oh! Tiene razón: la ruta 'application' ya está incluida en APPLICATION_PATH. Lo siento. Corregir mi respuesta. Además, por supuesto, tiene razón: dado que puede definir la asignación en la llamada 'addPath()', puede usar casi cualquier nombre de clase que desee. Tiendo a imitar la estructura de Zend en mi propio espacio de nombres de la biblioteca, incluso si son un poco más largos. Por ejemplo, suelo nombrar un complemento como 'My_Controller_Plugin_SomePlugin', pero a menudo veo a otros usar algo como' My_Plugin_SomePlugin'. Como observa, de cualquier manera funciona siempre y cuando su llamada 'addPath()' lo mapee correctamente. Gracias y ¡salud! ;-) –

6

Usted puede colocar ayudantes de acción en su propia biblioteca. Además de la biblioteca/Zend, donde están todas las cosas de Zend, puedes crear una biblioteca/carpeta MyLibrary (MyLibrary es arbitrariamente elegida) y poner allí los ayudantes de acción.

Un buen lugar es la carpeta library/MyLibrary/Controller/Action/Helper que necesita crear y colocar allí su ayudante de acción (es decir, Navigation.php). En este archivo, crea la clase MyLibrary_Controller_Action_Helper_Navigation.

El siguiente paso es agregar el asistente de acción al HelperBroker de Zend Framework durante el arranque. Por lo tanto, crear un nuevo método en el archivo de Bootstrap.php y añadir esta función:

protected function _initActionHelpers() 
{ 
    Zend_Controller_Action_HelperBroker::addHelper(
     new MyLibrary_Controller_Action_Helper_Navigation() 
    ); 
} 

Una última observación es necesaria para configurar el uso de esta biblioteca mediante la adición de esta regla a su application.ini:

autoLoaderNameSpaces[] = "MyLibrary_" 
1

Usted puede hacer esto a través de su archivo application.ini al igual que

resources.view[] = 
resources.view.helperPath.Default_View_Helper_ = APPLICATION_PATH "/views/helpers/" 

A continuación, en su camino views/helpers puede crear un archivo como Time.php.Este archivo contendrá el siguiente código:

<?php 

class Default_View_Helper_Time extends Zend_View_Helper_Abstract 
{ 
    public function time() 
    { 
     $date = new Zend_Date(); 

     return $date->get(Zend_Date::TIME_MEDIUM); 
    } 
} 

?> 

Para utilizar esto en sus scripts de vista se usaría

<?=$this->time()?> 

cual sería mostrar la hora actual mediante el nuevo View_Helper

+0

-1 como op está hablando de ayudantes de acción, no ver helpers – jackocnr

+0

hola ¿cómo puedo llamar a view helper en mi aplicación controlador helper ..? – d3bug3r

0

Puede evitar tener para registrar su espacio de nombres y ruta de ayudante de acción dentro del Bootstrap.php al declararlos en el application.ini en su lugar como así:

resources.frontController.actionHelperPaths.My_Controller_Action_Helper = APPLICATION_PATH "/controllers/helpers" 

Simplemente reemplace My_Controller_Action_Helper con su espacio de nombre deseado, y modifique la ruta del directorio de ayudantes en consecuencia.

El ayudante se puede inicializar la misma manera:

$this->_helper->myHelper; 

Como se ha mencionado por los documentos, registrando el prefijo o la ruta de los ayudantes generalmente se prefiere debido ayudantes no se inicializan hasta que se llaman igual que en el fragmento arriba

Por supuesto, crear instancias y pasando ayudantes para el corredor es una tiempo de bit y de uso intensivo de recursos, por lo que existe dos métodos para automatizar cosas ligeramente: addprefix() y addpath().

http://framework.zend.com/manual/1.12/en/zend.loader.pluginloader.html

Adición de la entrada de configuración para el application.ini sigue el mismo patrón sugerido.

Cuestiones relacionadas