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

ZF muchas dudas

Estas en el tema de ZF muchas dudas en el foro de Zend en Foros del Web. Que tal usare este post para despejarme todas mis dudas... 1- ¿Que es el boostrap en si? 2- ¿Como puedo cargar mis helpers por defecto? ...

  #1 (permalink)  
Antiguo 20/05/2011, 22:46
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años
Puntos: 31
ZF muchas dudas

Que tal usare este post para despejarme todas mis dudas...

1- ¿Que es el boostrap en si?
2- ¿Como puedo cargar mis helpers por defecto?
3- ¿Como puedo extender las funcionalidades de los Helper?, es decir creo un funcion que se llame calcularEdad(@fechaNac), en mi vista me gustaria poder hacer algo asi

Código PHP:
Ver original
  1. Su edad es <?php echo calcularEdad(@fecha); ?>

4- ¿Puedo cargar diveresas vistas en un controlador?, algo como esto
Código PHP:
Ver original
  1. $this->load->view('header');
  2. $this->load->view('menu');
  3. $this->load->view('cuerpo');

Aunque ya lo tengo resuelto en un layout, pero quisiera saber como se hace

4.1 ¿Como especifico que controladores van hacer uso del layout por defecto?
4.2 ¿Como puedo imprimir variables dentro del layout?, es decir tengo una aplicacion dinamica supongamos que cada ves que voy navegando por la web el <title></title> quiero que cambie de nombre, por ejemplo en INicio deberia decir Inicio, en el modulo de Usuario, deberia decir otra cosa... es decir alterar el nombre de los <title> que esta defenido en mi layout por defecto lo tengo asi

Código PHP:
Ver original
  1. <!DOCTYPE html
  2.     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  3.     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4. <html>
  5. <head>
  6.     <?php echo $this->headTitle('Peru Guitar | Red Social de Musicos') ?>
  7.     <?php echo $this->headScript()?>
  8.     <?php echo $this->headStyle() ?>
  9.     <?php echo $this->headLink()->appendStylesheet('css/style.css') ?>
  10.     <?php echo $this->headLink()->appendStylesheet('css/smoothness/jquery-ui-1.8.13.custom.css') ?>
  11. </head>
  12. <body>
  13.     <?php echo $this->render('header.phtml') ?>
  14.     <div id="pg_content" class="ui-corner-all"><?php echo $this->layout()->content ?></div>
  15.     <?php echo $this->render('footer.phtml')?>
  16. </body>
  17. </html>
  #2 (permalink)  
Antiguo 20/05/2011, 23:48
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: ZF muchas dudas

ufff, mijo vas a tener que leer antes de crear la aplicación

1. Trata esta lectura http://framework.zend.com/manual/en/...operation.html o este http://en.wikipedia.org/wiki/Bootstrapping_(computing) (en palabras sencillas es donde se indica aquellas utilidades que se van a necesitar a través de toda la aplicación)

2. Lee este artículo http://devzone.zend.com/article/3350

3. Lee el artículo anterior (tal vez haya otra forma de hacerlo, ya mismo te dirán)

4. Te recomiendo mejor el uso de layouts. Pero puedes cargar diferentes vistas usando en el controlador $this->render(); Te recomiendo otra lectura http://framework.zend.com/manual/en/...iewintegration

4.1 Puedes indicar algo así
Código PHP:
Ver original
  1. public function init()
  2. {
  3.     $this->_helper->layout->setLayout('index'); //layout index.phtml
  4. }

4.2 Te recomiendo hacerlo en el controlador, algo así
index.phtml
Código PHP:
Ver original
  1. .....
  2. <head>
  3. <?php echo $this->headTitle(); ?>
  4. </head>
  5. ......

en el controlador
Código PHP:
Ver original
  1. public function init()
  2. {
  3.     $this->_helper->layout->setLayout('index');
  4.     $this->view->headTitle('Foo');
  5. }
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 21/05/2011, 05:56
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años
Puntos: 31
Respuesta: ZF muchas dudas

4.2

No me funciono

Código PHP:
Ver original
  1. $this->_helper->layout->setLayout('default');
  2.         $this->view->headTitle('Peru Guitar | Red Social de Musicos');


Su puestamente estoy creando una variable para la vista no ?, llamada headTitle ?

Hago el echo asi, en mi layout:

Código PHP:
Ver original
  1. <?php echo $this->headScript()?>

o asi
Código PHP:
Ver original
  1. <?php echo $this->headScript ?>

Y no imprime nada :(
  #4 (permalink)  
Antiguo 21/05/2011, 06: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: ZF muchas dudas

No estas creando una variable, estas utilizando un view helper, en este caso headTitle, las respuestas a todas la preguntas que has echo, estan en la documentación, te sugiero que la leas detenidamente.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #5 (permalink)  
Antiguo 21/05/2011, 07:15
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años
Puntos: 31
Respuesta: ZF muchas dudas

Ok me slaio el titulo, pero cuando lo especifico en la vista... yo quiero especificar desde el controlar el nombre del titulo y pasarlo a mi layout, pero no lo hace
  #6 (permalink)  
Antiguo 21/05/2011, 07:26
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: ZF muchas dudas

somecontroller.php
Código PHP:
Ver original
  1. ...
  2. $this->view->headTitle('Peru Guitar | Red Social de Musicos');
  3. ...
layout.phtml
Código HTML:
Ver original
  1. <?php echo $this->headTitle(); ?>

Así lo tienes tú ?
__________________
http://es.phptherightway.com/
thats us riders :)
  #7 (permalink)  
Antiguo 21/05/2011, 07:30
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años
Puntos: 31
Respuesta: ZF muchas dudas

ajaaa, tengo que destacara que mi proyecto es una aplicacion modular, tendra algo que ver ¿?

Edit: Ya me salio xD

Última edición por HiToGoRoShi; 21/05/2011 a las 07:40
  #8 (permalink)  
Antiguo 21/05/2011, 08:20
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años
Puntos: 31
Respuesta: ZF muchas dudas

como puedo divir mi Modelo ?

Tengo mi carpeta modelo y dentro hay BLL, y DAL

El cuall BLL , solo hac ela logica de negocio y DAL el acceso base de datos

Quiero tener por defecto en el boostrap esas dos carpetas seteadas para poder invocarlos cuando quiera


MI boostrap es asi
Código PHP:
Ver original
  1. <?php
  2. class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
  3. {
  4.     protected function _initTimezone()
  5.     {
  6.  
  7.         date_default_timezone_set('America/Lima');
  8.     }
  9.    
  10.     protected function _initAutoload ()
  11.     {
  12.         $moduleLoader = new Zend_Application_Module_Autoloader(
  13.         array('namespace' => 'Business Logic Layer', 'basePath' => APPLICATION_PATH));
  14.         return $moduleLoader;
  15.     }
  16.    
  17.     protected function _initResponse()
  18.     {
  19.         $this->bootstrap('frontController');
  20.  
  21.         $response = new Zend_Controller_Response_Http();
  22.  
  23.         $response->setHeader('language', 'en')
  24.                  ->setHeader('content-language', 'en')
  25.                  ->setHeader('Content-Type', 'text/html; charset=utf-8');
  26.  
  27.         $this->getPluginResource('frontController')->getFrontController()
  28.                                                    ->setResponse($response);
  29.  
  30.         return $response;
  31.     }
  32. }
  #9 (permalink)  
Antiguo 21/05/2011, 08:32
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: ZF muchas dudas

Esa separación ya existe en Zend,

Application_Model_User --> Model
Application_Model_Mapper_User --> Mapper
Application_Model_DbTable_User --> Dao
__________________
http://es.phptherightway.com/
thats us riders :)
  #10 (permalink)  
Antiguo 21/05/2011, 09:11
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años
Puntos: 31
Respuesta: ZF muchas dudas

:o, genial :), mapperUser es la logica de negocio ?
  #11 (permalink)  
Antiguo 21/05/2011, 09:53
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años
Puntos: 31
Respuesta: ZF muchas dudas

pueden compartirme algun proyecto simple heho en ZF ?
  #12 (permalink)  
Antiguo 21/05/2011, 10:04
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: ZF muchas dudas

Para el mapper, te recomiendo que leas este tema http://www.forosdelweb.com/f68/exten...s-bbdd-905154/

PD: Te recomiendo que vayas paso a paso. Zend es una librería que su curva de aprendizaje es grande. Me imagino que quieres aprender de una vez lo que hace el framework, como me paso al principio cuando quería saber como usar esta librería (aún sigo aprendiendo). Cuando quieras saber algo dedicate a esa solamente para que lo domines, no trates de aprender varias cosas a la vez.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Última edición por abimaelrc; 21/05/2011 a las 10:10
  #13 (permalink)  
Antiguo 21/05/2011, 12:41
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años
Puntos: 31
Respuesta: ZF muchas dudas

Ok estuve viendo el quickstart, y logro comprender maso menos. tonces las entidades lo puedo inclur en el mismo archivo de mi datamapper, y el dao la carpeta dtable

Application_Model_Usuario
Application_Model_Mapper_Usuario
Application_Model_DbTable_Usuario

Pero no puedo incluirlos en 3 carpetas disitintas ?

Es decir, dto, dao, mapper, asi tego todo mas ordenado y no todo acumulado en el modelo, osea seria asi

Cita:
Modelo/
Modelo/dto
Modelo/dao
Modelo/mapper
Mi pregunta es, como hago para llamar a estos sin usar el include_once, como configuro al boostrap para que detecte esas rutas, o, como hacen ustedes? colocan todo los archivos php en la carpeta modelo, o los separan como yo siempre solia trabajar
  #14 (permalink)  
Antiguo 21/05/2011, 13:33
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: ZF muchas dudas

Depende, si lo colocas en el model que esta en el application debes crear el nombre de la clase
Código PHP:
Ver original
  1. <?php
  2. // Application/Models/Foo.php
  3. class Application_Model_Foo
  4. {
  5. ....
  6. }
y cuando lo llames en el controlador lo llamas
Código PHP:
Ver original
  1. $foo = new Application_Model_Foo;

Por favor pasa por el quickstart.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #15 (permalink)  
Antiguo 21/05/2011, 14:09
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: ZF muchas dudas

Son 3 carpetas diferentes,

Código OTHER:
Ver original
  1. models --> Application_Model_Usuario
  2. models/mapper --> Application_Model_Mapper_Usuario
  3. models/DbTable --> Application_Model_DbTable_Usuario

No es necesario utilizar include's porque el autoloader de cada modulo ya esta preparado para ir a buscar a cada una de las carpetas, lo único que debes hacer es, para cada modulo crear un Bootstrap que extienda de Zend_Application_Module_Bootstrap, este se encargara de inicializar los recursos(entre ellos el autoloader) del modulo, por ejemplo para un modulo admin seria algo asi:

Código PHP:
Ver original
  1. //application/modules/admin/Bootstrap.php
  2. class Admin_Bootstrap extends Zend_Application_Module_Bootstrap
  3. {}

Con esto ya puedes hacer

new Admin_Model_User
new Admin_Model_Mapper_User
new Admin_Model_DbTable_User

etc...

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #16 (permalink)  
Antiguo 22/05/2011, 08:28
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años
Puntos: 31
Respuesta: ZF muchas dudas

Genial colega, creo que voy bien aunque hay unas cosas que me loquearon en el quickstart, una pregunta veo que el datamapper es un intermediario entre mi DAO y mi entidad, osea supongamos que si yo quisiera hacer un metodo que me traiga a todos los alumnos mayores de 15 años, lo haria en el datamapper no ?, o supongamos los alumnos que se encentren activos el mes de hoy, o sea lo que fuera el caso que necesite hacer logica de negocio
  #17 (permalink)  
Antiguo 22/05/2011, 14:46
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años
Puntos: 31
Respuesta: ZF muchas dudas

No puedo cargar el mapper, reconoce la carpeta DbTable pero la carpeta mapper no...

  #18 (permalink)  
Antiguo 22/05/2011, 15:01
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: ZF muchas dudas

La carpeta es mappers "s" al final y los ficheros deberían empezar en mayúscula(Noticia.php en vez de noticia.php), ahora no te da problemas porque seguramente estas en win, pero en cuanto pases a *nix te va a dar problemas.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #19 (permalink)  
Antiguo 22/05/2011, 15:06
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años
Puntos: 31
Respuesta: ZF muchas dudas

Asi es, por eso lo pongo en minisculas dejame probar ... entonces el estandar para declarar una clase Mapper es como mencione no ?, no puedo igual solo lo reocnoce estando en la raiz de models
  #20 (permalink)  
Antiguo 22/05/2011, 15:14
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: ZF muchas dudas

Como lo estas haciendo y que versión del FW estas utilizando ?, el fichero debería ser application/models/mappers/Noticia.php y la clase llamarse Application_Model_Mapper_Noticia.
__________________
http://es.phptherightway.com/
thats us riders :)
  #21 (permalink)  
Antiguo 22/05/2011, 15:22
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años
Puntos: 31
Respuesta: ZF muchas dudas

La 1.11, la que trae el zendStudio por defecto, coloco en carpeta model mappers, Application_Model_Mapper_Noticia y vota este error

[22-May-2011 08:22:44] PHP Fatal error: Class 'Application_Model_Mapper_Noticia' not found in C:\Archivos de programa\Zend\Apache2\htdocs\peruguitar\applicatio n\modules\default\controllers\IndexController.php on line 18
  #22 (permalink)  
Antiguo 22/05/2011, 15:45
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: ZF muchas dudas

Es muy raro, las condiciones son:
  1. Que el fichero dentro de mappers se llame Noticia.php
  2. Que la clase sea Application_Model_Mapper_Noticia

Si no funciona con esto es porque algo esta pisando el autoloader, si tenes algún autoloader en el Bootstrap borralo porque a menos que agregues algún custom resource no lo precisas.
__________________
http://es.phptherightway.com/
thats us riders :)
  #23 (permalink)  
Antiguo 23/05/2011, 21:36
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años
Puntos: 31
Respuesta: ZF muchas dudas

Porfin me salio, gran pregunta que hace esto

Código PHP:
Ver original
  1. protected function _initAutoload ()
  2.     {
  3.         $moduleLoader = new Zend_Application_Module_Autoloader(
  4.         array('namespace' => '', 'basePath' => APPLICATION_PATH    ));
  5.         return $moduleLoader;
  6.     }
  #24 (permalink)  
Antiguo 23/05/2011, 21:43
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: ZF muchas dudas

¿No se supone que es lo que hace el autoloader automáticamente?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #25 (permalink)  
Antiguo 24/05/2011, 01:37
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: ZF muchas dudas

Cita:
Iniciado por HiToGoRoShi Ver Mensaje
Porfin me salio, gran pregunta que hace esto

Código PHP:
Ver original
  1. protected function _initAutoload ()
  2.     {
  3.         $moduleLoader = new Zend_Application_Module_Autoloader(
  4.         array('namespace' => '', 'basePath' => APPLICATION_PATH    ));
  5.         return $moduleLoader;
  6.     }
Inicializa el autoloader del modulo, el que mostras en particular mapea a:

Model_User
Model_Mapper_User
Mode_DbTable_User

etc...

Antes era obligatorio el autoloader en el bootstrap, ahora no lo es mas, ya que existe el namespace Application y el autoloader para este se inicializa de forma automática.

Me alegro que lo hayas solucionado, y seria bueno que compartas la solución, talvés le sirva a otros con el mismo problema.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #26 (permalink)  
Antiguo 24/05/2011, 19:24
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años
Puntos: 31
Respuesta: ZF muchas dudas

Borrar eso del autoloader :p
  #27 (permalink)  
Antiguo 25/05/2011, 21:42
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años
Puntos: 31
Respuesta: ZF muchas dudas

como puedo hacer para ver los errores del zendframework, por defecto solo vota esto

Cita:
An error occurred
Application error
Quisiera ver tambien, cuando un qurey lo hago mal ... etc

pd: uso zend Server, y no siempre se muestra los erroes en el log
  #28 (permalink)  
Antiguo 26/05/2011, 01:32
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: ZF muchas dudas

Tienes seteado el APPLICATION_ENV a development ?, si no es así, agrega al vhost o htaccess la siguiente linea:

Código Apache:
Ver original
  1. SetEvn APPLICATION_ENV development
__________________
http://es.phptherightway.com/
thats us riders :)
  #29 (permalink)  
Antiguo 26/05/2011, 12:17
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años
Puntos: 31
Respuesta: ZF muchas dudas

Ok, probare...

Ahora tengo uan duda respecto al datamapper, entiendo y corrigeme porfavor que es un intermedio entre mi entidad y la persistencia ... no seria correcto crear los querys en la persistencia y el datammapper recoge esos valores, y si tiene que hacer alguna logica, pues lo hace ahi?? xq en el ejemplo del quickstart, la logica de negocio y la recollecion de datos lo hace en el detammaper, esta bien instancia al otro modelo llamado Application_Model_XXX que extendiende de dbtable, justamente en ese dbtable no deberia hacer el query ?

Es decir

Entidad - mapper - dbtable

Entidad: los valores que encapsulare de una tabla hacia una clase
mapper: es un intermediario para comunicar mi tabla con mi entidad
dbtable: recoge los datos de la db

Pero .. en la documentacion ZF crea la clase que extiende dbtable, y esta hace que mi tabla sea un objeto, es decir para hacer consultas solo instanciare a mi modelo que extiende de DBTable...., pues esas consultas no las deberia crear en la misma clase que extiende dl DBTable?

Última edición por HiToGoRoShi; 26/05/2011 a las 12:22
  #30 (permalink)  
Antiguo 26/05/2011, 12:47
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: ZF muchas dudas

Puedes postear el link al Quickstart que hace referencia a lo que tu mencionas ?
__________________
http://es.phptherightway.com/
thats us riders :)

Etiquetas: dudas, frameworks-y-php-orientado-a-objetos, muchas
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 17:29.