Foros del Web » Programando para Internet » PHP » Zend »

Como crear e implementar los helpers

Estas en el tema de Como crear e implementar los helpers en el foro de Zend en Foros del Web. Que tal amigos, me encuentro creando un helper pero no tengo idea como activarlos ... Este es mi helper @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original ...
  #1 (permalink)  
Antiguo 09/06/2011, 19:13
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años
Puntos: 31
Como crear e implementar los helpers

Que tal amigos, me encuentro creando un helper pero no tengo idea como activarlos ...

Este es mi helper

Código PHP:
Ver original
  1. <?php
  2. class Debug extends Zend_View_Helper_Abstract{
  3.     public function array_debug($data){
  4.         return '<pre>'.print_r($data).'</pre>';
  5.     }
  6. }

En mi controlador lo llamo asi
Código PHP:
Ver original
  1. $this->view->addBasePath(APPLICATION_PATH . 'modules/default/view/helpers/debug.php','Debug);

Ya que esa es la ruta donde se encuentra, ahora trato de usarlo y no puedo ...

Acaso tengo que instanciar al objeto ?, pues no creo xq en el addBasePath, ya esta crenado la instancia ...

Bueno y hago asi en mi controlador, y no funciona

Código PHP:
Ver original
  1. $this->view->array_debug();
  #2 (permalink)  
Antiguo 10/06/2011, 02:53
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Como crear e implementar los helpers

Has leído la documentación ?, hay que seguir ciertas reglas...

application/modules/default/view/helpers/Debug.php
Código PHP:
Ver original
  1. class Zend_View_Helper_Debug extends Zend_View_Helper_Abstract
  2. {
  3.     public function debug($data)
  4.     {
  5.         return '<pre>'.print_r($data).'</pre>';
  6.     }
  7. }

view
Código HTML:
Ver original
  1. <?php echo $this->debug(array(/***/)); ?>
__________________
http://es.phptherightway.com/
thats us riders :)

Última edición por masterpuppet; 10/06/2011 a las 06:07 Razón: typo
  #3 (permalink)  
Antiguo 10/06/2011, 07:36
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Como crear e implementar los helpers

Solo como tip el nombre debería de ser Application_View_Helper_Debug.

Saludos.
  #4 (permalink)  
Antiguo 10/06/2011, 08:03
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años
Puntos: 31
Respuesta: Como crear e implementar los helpers

yo me guie de otro tutorial que ponian My_Helper_Foo, y ponia la ruta :s, han habido muchos cambios en versiones no?
  #5 (permalink)  
Antiguo 10/06/2011, 08:19
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Como crear e implementar los helpers

@HiToGoRoShi, estas seguro que el tutorial era de view helpers ?

@GatorV, los view helpers dentro de cada modulo pueden utilizar el prefijo Zend_View_Helper, para que funcione con el pefijo del modulo o el por defecto Application como tu propones(aunque en este caso en concreto seria Default), debes agregar al application.ini el helperPath

Código INI:
Ver original
  1. resources.view.helperPath.Application_View_Helper = APPLICATION_PATH "/views/helpers"
  2. resources.view.helperPath.Default_View_Helper = APPLICATION_PATH "/modules/default/views/helpers"

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #6 (permalink)  
Antiguo 10/06/2011, 08:27
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Como crear e implementar los helpers

Cierto pero creo para evitar confundir los helpers sería mejor que usara Application (o Default como mejor expones )
  #7 (permalink)  
Antiguo 10/06/2011, 08:45
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años
Puntos: 31
Respuesta: Como crear e implementar los helpers

yo me guie de otro tutorial que ponian My_Helper_Foo, y ponia la ruta :s, han habido muchos cambios en versiones no?

Cual es el correcto tonces Application_View_Helper_Debug?, o zend_view_helper_Debug, igual con ambos no me sale ...

Voy por pasos lo que he hecho ....

application/modules/default/view/helpers/Debug.php
Código PHP:
Ver original
  1. <?php
  2. class Application_View_Helper_Debug extends Zend_View_Helper_Abstract{
  3.     public function array_debug($data){
  4.         return '<pre>'.print_r($data).'</pre>';
  5.     }
  6. }

En mi vista ..
Código PHP:
Ver original
  1. <?php echo $this->array_debug(array('a')); ?>

Erro que vota:
Código PHP:
Ver original
  1. An error occurred
  2. Application error
  3. Exception information:
  4.  
  5. Message: Plugin by name 'Array_debug' was not found in the registry; used paths: Zend_View_Helper_: Zend/View/Helper/;./views\helpers/;C:/Archivos de programa/Zend/Apache2/htdocs/peruguitar/application/modules/default/views\helpers/
  6. Stack trace:
  7.  
  8. #0 C:\Archivos de programa\Zend\ZendServer\share\ZendFramework\library\Zend\View\Abstract.php(1174): Zend_Loader_PluginLoader->load('Array_debug')
  9. #1 C:\Archivos de programa\Zend\ZendServer\share\ZendFramework\library\Zend\View\Abstract.php(610): Zend_View_Abstract->_getPlugin('helper', 'array_debug')
  10. #2 C:\Archivos de programa\Zend\ZendServer\share\ZendFramework\library\Zend\View\Abstract.php(336): Zend_View_Abstract->getHelper('array_debug')
  11. #3 C:\Archivos de programa\Zend\Apache2\htdocs\peruguitar\application\modules\default\views\scripts\index\index.phtml(20): Zend_View_Abstract->__call('array_debug', Array)
  12. #4 C:\Archivos de programa\Zend\Apache2\htdocs\peruguitar\application\modules\default\views\scripts\index\index.phtml(20): Zend_View->array_debug(Array)
  13. #5 C:\Archivos de programa\Zend\ZendServer\share\ZendFramework\library\Zend\View.php(108): include('C:\Archivos de ...')
  14. #6 C:\Archivos de programa\Zend\ZendServer\share\ZendFramework\library\Zend\View\Abstract.php(880): Zend_View->_run('C:/Archivos de ...')
  15. #7 C:\Archivos de programa\Zend\ZendServer\share\ZendFramework\library\Zend\Controller\Action\Helper\ViewRenderer.php(897): Zend_View_Abstract->render('index/index.pht...')
  16. #8 C:\Archivos de programa\Zend\ZendServer\share\ZendFramework\library\Zend\Controller\Action\Helper\ViewRenderer.php(918): Zend_Controller_Action_Helper_ViewRenderer->renderScript('index/index.pht...', NULL)
  17. #9 C:\Archivos de programa\Zend\ZendServer\share\ZendFramework\library\Zend\Controller\Action\Helper\ViewRenderer.php(957): Zend_Controller_Action_Helper_ViewRenderer->render()
  18. #10 C:\Archivos de programa\Zend\ZendServer\share\ZendFramework\library\Zend\Controller\Action\HelperBroker.php(277): Zend_Controller_Action_Helper_ViewRenderer->postDispatch()
  19. #11 C:\Archivos de programa\Zend\ZendServer\share\ZendFramework\library\Zend\Controller\Action.php(523): Zend_Controller_Action_HelperBroker->notifyPostDispatch()
  20. #12 C:\Archivos de programa\Zend\ZendServer\share\ZendFramework\library\Zend\Controller\Dispatcher\Standard.php(295): Zend_Controller_Action->dispatch('indexAction')
  21. #13 C:\Archivos de programa\Zend\ZendServer\share\ZendFramework\library\Zend\Controller\Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
  22. #14 C:\Archivos de programa\Zend\ZendServer\share\ZendFramework\library\Zend\Application\Bootstrap\Bootstrap.php(97): Zend_Controller_Front->dispatch()
  23. #15 C:\Archivos de programa\Zend\ZendServer\share\ZendFramework\library\Zend\Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
  24. #16 C:\Archivos de programa\Zend\Apache2\htdocs\peruguitar\public\index.php(25): Zend_Application->run()
  25. #17 {main}  
  26.  
  27. Request Parameters:
  28.  
  29.   'controller' => 'index',
  30.   'action' => 'index',
  31.   'module' => 'default',
  32. )
  #8 (permalink)  
Antiguo 10/06/2011, 08:57
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Como crear e implementar los helpers

Funciona de las dos formas, pero por claridad como bien comenta GatorV, deberias utilizar el prefijo del modulo, en este caso Default_View_Helper, y creo que no has leído la documentación, el nombre del método "principal" debe ser igual al último segmento de la clase(lowerCamelCase), osea: debug.

application/modules/default/view/helpers/Debug.php
Código PHP:
Ver original
  1. class Default_View_Helper_Debug extends Zend_View_Helper_Abstract
  2. {
  3.     public function debug($data)
  4.     {
  5.         return '<pre>'.print_r($data).'</pre>';
  6.     }
  7. }

si optas por este prefijo tienes que agregar al application.ini

Código INI:
Ver original
  1. resources.view.helperPath.Default_View_Helper = APPLICATION_PATH "/modules/default/views/helpers"

y en la vista

Código PHP:
Ver original
  1. <?php echo $this->debug(array('a')); ?>

@GatorV, tienes razón por claridad es mejor opción, mi aclaración fue porque daba la sensación de ser algo obligatorio.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #9 (permalink)  
Antiguo 10/06/2011, 09:18
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años
Puntos: 31
Respuesta: Como crear e implementar los helpers

Genial me funciono, cual es la diferencia de configurarlo en mi application.ini en ves del boostrap?, porque tengo entedido que ambos se puede hacer no?

Ahora otra cosa, este view helper es para la vista ..................... si yo quiero para codigo dentro de mi modelo, es decir validar un password, ya que tiene una serie de algoritmos para llegar a la validacion del password y me gustaria hacerlo eso una funcion que pueda llamarlo desde cualquier modelo

Una cosa rapida que se me ocurre, es clear una clase en mi modelo que se encarge de eso ... pero estoy seguro de que el framework tiene su propio helper para ese tipo de cosas

Otra cosa mas, por helper que implemente tiene que hacerse en una clase?, osea la clase de un helper puede tener muchos metodos, o solamente puede tener un metodo y debe llamarse igual que la clase, xq si quiero cambiar el nombre me vota error ...

Última edición por HiToGoRoShi; 10/06/2011 a las 09:33
  #10 (permalink)  
Antiguo 10/06/2011, 12:22
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Como crear e implementar los helpers

Cita:
cual es la diferencia de configurarlo en mi application.ini en ves del boostrap?, porque tengo entedido que ambos se puede hacer no?
No hay diferencia, es una cuestión de preferencias.

Cita:
si yo quiero para codigo dentro de mi modelo, es decir validar un password, ya que tiene una serie de algoritmos para llegar a la validacion del password y me gustaria hacerlo eso una funcion que pueda llamarlo desde cualquier modelo

Una cosa rapida que se me ocurre, es clear una clase en mi modelo que se encarge de eso ... pero estoy seguro de que el framework tiene su propio helper para ese tipo de cosas
En todo caso serian validators no helpers y Zend no tiene nada predefinido en relación a estos con los modelos.

Cita:
Otra cosa mas, por helper que implemente tiene que hacerse en una clase?, osea la clase de un helper puede tener muchos metodos, o solamente puede tener un metodo y debe llamarse igual que la clase, xq si quiero cambiar el nombre me vota error ...
Cada helper debe ser una clase, Zend es 100% OOP, por suerte eso de funciones sueltas no existe.
El helper puede tener varios metodos pero es obligatorio que tenga uno con las caracteristicas que te comente en el post anterior, si quieres tener varios metodos puede utilizar Fluent Interface para acceder a ellos, algo asi:

Código PHP:
Ver original
  1. class Default_View_Helper_Debug extends Zend_View_Helper_Abstract
  2. {
  3.     private $_data = array();
  4.  
  5.     public function debug(array $data)
  6.     {
  7.         $this->_data = $data;
  8.         return this;
  9.     }
  10.  
  11.     public function stringDebug($glue = ',')
  12.     {
  13.         return implode($glue, $this->_data);
  14.     }
  15.  
  16.     public function arrayDebug()
  17.     {
  18.          return '<pre>'.print_r($this->_data).'</pre>';
  19.     }
  20.  
  21.     public function __toString()
  22.     {
  23.         return $this->stringDebug();
  24.     }
  25. }

y para utilizarlo:

Código PHP:
Ver original
  1. <?php echo $this->debug(array('data')); ?>

o

Código PHP:
Ver original
  1. <?php echo $this->debug(array('data'))->arrayDebug(); ?>

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #11 (permalink)  
Antiguo 10/06/2011, 19:51
 
Fecha de Ingreso: octubre-2010
Ubicación: Uruguay, Canelones
Mensajes: 66
Antigüedad: 13 años, 6 meses
Puntos: 6
Respuesta: Como crear e implementar los helpers

O sea por lo que ustedes aconsejan hay que realizar un helpers por cada modulo??? o realizando dentro del modulo default ya queda para utilidad de los demás?
  #12 (permalink)  
Antiguo 10/06/2011, 22:50
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Como crear e implementar los helpers

Cuando lo dejas en el default (o Application) estan disponibles para toda tu app, solo es cuestión de agregarlas al View Path.

Etiquetas: frameworks-y-php-orientado-a-objetos, implementar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:27.