Dos pensamientos de dónde colocar sus ayudantes de acción personalizados:
- En una biblioteca personalizada separada
- 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!
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
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! ;-) –