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

[SOLUCIONADO] Paginator Zend Framework 2.0 beta

Estas en el tema de Paginator Zend Framework 2.0 beta en el foro de Zend en Foros del Web. Justo ahorita vino la iluminación a mi mente... No lo inyecta porque estamos instanciando el objeto directamente, para que funcione hay que pasarlo como dependencia ...

  #31 (permalink)  
Antiguo 16/02/2012, 17:35
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
Justo ahorita vino la iluminación a mi mente...

No lo inyecta porque estamos instanciando el objeto directamente, para que funcione hay que pasarlo como dependencia como el table, o usar el locator para sacarlo del di, por lo que la opción más limpia a mi gusto es usar el paginationControl en el view directamente
  #32 (permalink)  
Antiguo 16/02/2012, 17:54
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Paginator Zend Framework 2.0 beta

Cita:
Iniciado por GatorV Ver Mensaje
Justo ahorita vino la iluminación a mi mente...

No lo inyecta porque estamos instanciando el objeto directamente, para que funcione hay que pasarlo como dependencia como el table, o usar el locator para sacarlo del di, por lo que la opción más limpia a mi gusto es usar el paginationControl en el view directamente
En ese caso tampoco haría falta:

Código PHP:
Ver original
  1. PaginationControl::setDefaultViewPartial('album/items.phtml');

Se lo pasas en la vista y ya

Código PHP:
Ver original
  1. <?php
  2. echo $this->paginationControl($albums, 'Sliding', 'album/items.phtml');
  3. ?>

Pero me hace pensar ZF1, como en esa versión no necesitas usar setView y te pagina fácilmente.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #33 (permalink)  
Antiguo 16/02/2012, 18:39
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: Paginator Zend Framework 2.0 beta

Claro de hecho lo puedes hacer igual, la diferencia es que ahora el plugin de paginationControl te permite establecer un script por defecto (por eso la llamada es estática) es como establecer el defaultAdapter de un DbTable.

Prueba hacerlo directamente como tu segunda llamada y funciona igual
Código PHP:
Ver original
  1. public function indexAction()
  2.     {
  3.         $albums = $this->getAlbumTable()->fetchAll();
  4.         $matches = $this->getEvent()->getRouteMatch();
  5.         $nPage = $matches->getParam('page', 1);
  6.        
  7.         //PaginationControl::setDefaultViewPartial('paginator.phtml');
  8.        
  9.         $paginator = Paginator::factory($albums);
  10.         $paginator->setDefaultItemCountPerPage(5);
  11.         $paginator->setCurrentPageNumber($nPage);
  12.         //$paginator->setView($this->getLocator()->get('view'));
  13.        
  14.         return array('albums' => $paginator);
  15.     }

View:
Código PHP:
Ver original
  1. <h1>Albums</h1>
  2. <ul>
  3. <?php foreach ($this->albums as $album) { ?>
  4.     <li><?php echo $album->album_id; ?> - <?php echo $album->album; ?></li>
  5. <?php } ?>
  6. </ul>
  7. <?php echo $this->paginationControl($this->albums, 'Sliding', 'paginator.phtml'); ?>

Saludos.
  #34 (permalink)  
Antiguo 16/02/2012, 20:04
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Paginator Zend Framework 2.0 beta

Gracias GatorV, también puedes usar setView en la vista

lo dejé así:

Controller:

Código PHP:
Ver original
  1. public function indexAction()
  2.     {
  3.         $data = $this->albumTable->fetchAll();
  4.        
  5.         $matches = $this->getEvent()->getRouteMatch();
  6.         $nPage = $matches->getParam('page', 1);
  7.        
  8.         PaginationControl::setDefaultViewPartial('album/items.phtml');
  9.        
  10.         $paginator = Paginator::factory($data);
  11.         $paginator->setDefaultItemCountPerPage(5);
  12.        
  13.         $paginator->setCurrentPageNumber($nPage);
  14.        
  15.         return array(
  16.             'albums' => $paginator
  17.         );
  18.     }

View index.phtml

Código PHP:
Ver original
  1. <?php
  2. echo $albums->setView($this);
  3. ?>

Y el paginador lo dejé igual. Así funciona sin tener que usar paginationControl en la vista.

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #35 (permalink)  
Antiguo 16/02/2012, 20:04
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: Paginator Zend Framework 2.0 beta

De hecho para probar lo que digo hice esta prueba, el controller:
Código PHP:
Ver original
  1. <?php
  2.  
  3. namespace Album\Controller;
  4.  
  5. use Album\Model\DbTable\AlbumTable,
  6.     Zend\Mvc\Controller\ActionController,
  7.     Zend\Paginator\Paginator,
  8.     Zend\View\Helper\PaginationControl,
  9.     Zend\View\Renderer;
  10.  
  11.  
  12. class ListController extends ActionController
  13. {
  14.     protected $albumTable;
  15.     protected $view;
  16.    
  17.     public function setView(\Zend\View\Renderer $view)
  18.     {
  19.         $this->view = $view;
  20.        
  21.         return $this;
  22.     }
  23.    
  24.     public function getView()
  25.     {
  26.         return $this->view;
  27.     }
  28.    
  29.     public function setAlbumTable(AlbumTable $albumTable)
  30.     {
  31.         $this->albumTable = $albumTable;
  32.        
  33.         return $this;
  34.     }
  35.    
  36.     public function getAlbumTable()
  37.     {
  38.         return $this->albumTable;
  39.     }
  40.    
  41.     public function indexAction()
  42.     {
  43.         $albums = $this->getAlbumTable()->fetchAll();
  44.         $matches = $this->getEvent()->getRouteMatch();
  45.         $nPage = $matches->getParam('page', 1);
  46.        
  47.         PaginationControl::setDefaultViewPartial('paginator.phtml');
  48.        
  49.         $paginator = Paginator::factory($albums);
  50.         $paginator->setDefaultItemCountPerPage(5);
  51.         $paginator->setCurrentPageNumber($nPage);
  52.         $paginator->setView($this->getView());
  53.        
  54.         return array('albums' => $paginator);
  55.     }
  56. }

El DI:
Código PHP:
Ver original
  1. 'alias' => array(
  2.                 'album-list' => 'Album\Controller\ListController'
  3.             ),
  4.             'Album\Controller\ListController' => array (
  5.                 'parameters' => array (
  6.                    'albumTable' => 'Album\Model\DbTable\AlbumTable',
  7.                    'view' => 'view'
  8.                 )
  9.             ),

La vista:
Código PHP:
Ver original
  1. <h1>Albums</h1>
  2. <ul>
  3. <?php foreach ($this->albums as $album) { ?>
  4.     <li><?php echo $album->album_id; ?> - <?php echo $album->album; ?></li>
  5. <?php } ?>
  6. </ul>
  7. <?php echo $this->albums; ?>

y funciona correctamente
  #36 (permalink)  
Antiguo 17/02/2012, 16:36
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Paginator Zend Framework 2.0 beta

Si es cierto GatorV, lo acabo de probar y también funciona

Código PHP:
Ver original
  1. 'view' => 'view'

El view de la derecha es un alias de PhpRenderer que se jala desde el modulo Application, incluso podemos hacer otro alias en nuestro Modulo Album. Pero no entiendo el de la izquierda. A que se refiere este view?
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #37 (permalink)  
Antiguo 17/02/2012, 16:42
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: Paginator Zend Framework 2.0 beta

El de la derecha es el alias del Application, es correcto, el de la izquierda es la inyección que se le hace al controller, cuando declaras aquí:
Código PHP:
Ver original
  1. public function setView(\Zend\View\Renderer $view)
  2.     {
  3.         $this->view = $view;
  4.        
  5.         return $this;
  6.     }

Saludos.
  #38 (permalink)  
Antiguo 17/02/2012, 16:49
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Paginator Zend Framework 2.0 beta

Creo que es mejor hacerlo así, para no tocar el tema en la vista. Que interesante, me confundí con la misma palabra. Osea que si quiero

'view_paginator' => 'view'

tendría que hacer

Código PHP:
Ver original
  1. public function setView(\Zend\View\Renderer $view_paginator) {
  2.    $this->view = $view_paginator;
  3.        
  4.     return $this;
  5. }

Se le agradece GatorV

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #39 (permalink)  
Antiguo 17/02/2012, 17:07
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: Paginator Zend Framework 2.0 beta

Así es, aunque yo prefiero usar el paginationControl directo en la vista, se me hace más limpio

Saludos
  #40 (permalink)  
Antiguo 25/02/2012, 15:15
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Paginator Zend Framework 2.0 beta

Han visto todos los cambios que le hicieron al di del ZendSkeletonApplication

Código PHP:
Ver original
  1. <?php
  2. return array(
  3.     'di' => array(
  4.         'definition' => array(
  5.             'class' => array(
  6.                 'Zend\Mvc\Router\RouteStack' => array(
  7.                     'instantiator' => array(
  8.                         'Zend\Mvc\Router\Http\TreeRouteStack',
  9.                         'factory'
  10.                     ),
  11.                 ),
  12.             ),
  13.         ),
  14.         'instance' => array(
  15.             // Inject the plugin broker for controller plugins into
  16.             // the action controller for use by all controllers that
  17.             // extend it.
  18.             'Zend\Mvc\Controller\ActionController' => array(
  19.                 'parameters' => array(
  20.                     'broker'       => 'Zend\Mvc\Controller\PluginBroker',
  21.                 ),
  22.             ),
  23.             'Zend\Mvc\Controller\PluginBroker' => array(
  24.                 'parameters' => array(
  25.                     'loader' => 'Zend\Mvc\Controller\PluginLoader',
  26.                 ),
  27.             ),
  28.  
  29.             // Setup the View layer
  30.             'Zend\View\Resolver\AggregateResolver' => array(
  31.                 'injections' => array(
  32.                     'Zend\View\Resolver\TemplatePathStack',
  33.                 ),
  34.             ),
  35.             'Zend\View\Resolver\TemplatePathStack' => array(
  36.                 'parameters' => array(
  37.                     'paths'  => array(
  38.                         'application' => __DIR__ . '/../view',
  39.                     ),
  40.                 ),
  41.             ),
  42.             'Zend\View\Renderer\PhpRenderer' => array(
  43.                 'parameters' => array(
  44.                     'resolver' => 'Zend\View\Resolver\AggregateResolver',
  45.                 ),
  46.             ),
  47.             'Zend\Mvc\View\DefaultRenderingStrategy' => array(
  48.                 'parameters' => array(
  49.                     'baseTemplate' => 'layout/layout',
  50.                 ),
  51.             ),
  52.             'Zend\Mvc\View\ExceptionStrategy' => array(
  53.                 'parameters' => array(
  54.                     'displayExceptions' => true,
  55.                     'template'          => 'error/index',
  56.                 ),
  57.             ),
  58.             'Zend\Mvc\View\RouteNotFoundStrategy' => array(
  59.                 'parameters' => array(
  60.                     'notFoundTemplate' => 'error/404',
  61.                 ),
  62.             ),
  63.  
  64.             // Setup the router and routes
  65.             'Zend\Mvc\Router\RouteStack' => array(
  66.                 'parameters' => array(
  67.                     'routes' => array(
  68.                         'default' => array(
  69.                             'type'    => 'Zend\Mvc\Router\Http\Segment',
  70.                             'options' => array(
  71.                                 'route'    => '/[:controller[/:action]]',
  72.                                 'constraints' => array(
  73.                                     'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
  74.                                     'action'     => '[a-zA-Z][a-zA-Z0-9_-]*',
  75.                                 ),
  76.                                 'defaults' => array(
  77.                                     'controller' => 'Application\Controller\IndexController',
  78.                                     'action'     => 'index',
  79.                                 ),
  80.                             ),
  81.                         ),
  82.                         'home' => array(
  83.                             'type' => 'Zend\Mvc\Router\Http\Literal',
  84.                             'options' => array(
  85.                                 'route'    => '/',
  86.                                 'defaults' => array(
  87.                                     'controller' => 'Application\Controller\IndexController',
  88.                                     'action'     => 'index',
  89.                                 ),
  90.                             ),
  91.                         ),
  92.                     ),
  93.                 ),
  94.             ),
  95.         ),
  96.     ),
  97. );

https://github.com/zendframework/Zen...ule.config.php

Ahora el ejemplo básico que tenía no me funciona y tampoco el ejemplo de crear módulos del "manual", me sale:

Cita:
Fatal error: Uncaught exception 'Zend\View\Exception\RuntimeException' with message 'Zend\View\Renderer\PhpRenderer::render: Unable to render template "album/index"; resolver could not resolve to a file'
Saben como puedo solucionarlo o tienen un ejemplo de como crear modules en esta nueva estructura?

Vi en el controller que hacen esto:

Código PHP:
Ver original
  1. public function indexAction()
  2.     {
  3.         return new ViewModel();
  4.     }

Que hacen con esto? me perdí un poco con estos cambios.

Así es como lo tengo ahora: https://github.com/andresdzphp/zf2b2

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #41 (permalink)  
Antiguo 25/02/2012, 15:56
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: Paginator Zend Framework 2.0 beta

Según tengo entendido weierophinney estaba trabajando en el view layer justamente, asi que los cambios eran de esperar, igual lo que hay no es ni por asomo la versión final, de todas formas sigo pensando que viene demasiado lento.

En cuanto al ViewModel, lo deben de haber puesto para que la similitud con SF2 no sea tan descarada :P.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #42 (permalink)  
Antiguo 25/02/2012, 16:24
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: Paginator Zend Framework 2.0 beta

Con respecto al error, actualizaste module.config,php, Module.php, autoload_classmap.php y lo mas importante, el framework ?
__________________
http://es.phptherightway.com/
thats us riders :)
  #43 (permalink)  
Antiguo 25/02/2012, 17:16
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Paginator Zend Framework 2.0 beta

Gracias masterpuppet. Según leí en mayo iban a tener más tiempo para sacarlo adelante.

Ya lo pude solucionar Akrabat publicó hoy el ejemplo para el beta 3

https://github.com/akrabat/zf2-tutorial

Edito: Ahora en vez de hacer:

Código PHP:
Ver original
  1. 'Zend\View\PhpRenderer' => array (
  2.                 'parameters' => array (
  3.                      'options' => array (
  4.                          'script_paths' => array (
  5.                              'album' => __DIR__ . '/../views',
  6.                          )
  7.                      )  
  8.                 )
  9.             ),

Hay que usar:

Código PHP:
Ver original
  1. 'Zend\View\Resolver\TemplatePathStack' => array(
  2.                 'parameters' => array(
  3.                     'paths'  => array(
  4.                         'album' => __DIR__ . '/../view',
  5.                     ),
  6.                 ),
  7.             ),

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Última edición por andresdzphp; 25/02/2012 a las 17:28
  #44 (permalink)  
Antiguo 25/02/2012, 19:24
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: Paginator Zend Framework 2.0 beta

Me imagino que el ViewModel es para parecerse un poco a Spring jeje, que también tiene un ViewModel para renderear la vista
  #45 (permalink)  
Antiguo 04/03/2012, 12:18
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Paginator Zend Framework 2.0 beta

Hago un pull a git hoy y resulta que:

Cita:
Fatal error: Class 'Zend\Db\Table\AbstractTable' not found
entonces se pasó a usar Zend\Db\TableGateway\TableGateway y todo bien pero al paginador me tocó ajustarlo con el método toArray así:

Código PHP:
Ver original
  1. $paginator = Paginator::factory($data->toArray());

Está bien esto o que otra solución hay. Porque si no lo coloco me sale:

Cita:
Fatal error: Uncaught exception 'Exception' with message 'This result is a forward only result set, calling rewind() after moving forward is not supported'
Aquí pueden ver como tengo el paginador ahora:

https://github.com/andresdzphp/zf2b2

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #46 (permalink)  
Antiguo 04/03/2012, 13:06
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: Paginator Zend Framework 2.0 beta

En que momento salta la excepción ? al llamar a factory o en el view al iterar ? y si bien son test ten en cuenta lo que estas haciendo, pasando un result set completo al paginador,

Algo que no comparto es acceder a las variables del request a traves de RouteMatch, por claridad debería accederse desde el request.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)

Última edición por masterpuppet; 04/03/2012 a las 13:13
  #47 (permalink)  
Antiguo 04/03/2012, 13:28
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Paginator Zend Framework 2.0 beta

Gracias master. Me pasa al iterar en el view

Cita:
y si bien son test ten en cuenta lo que estas haciendo, pasando un result set completo al paginador
Si tengo en cuenta lo del result set, pero sinceramente no sé como podría adaptar la solución a lo que llevo con TableGateway

Estuve leyendo algo de eso: http://www.armando.ws/2008/10/zend_p...ur-result-set/

Cita:
Algo que no comparto es acceder a las variables del request a traves de RouteMatch, por claridad debería accederse desde el request.
Esta parte si que me interesa, cómo podría recoger por el request a page?
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Última edición por andresdzphp; 04/03/2012 a las 14:48
  #48 (permalink)  
Antiguo 04/03/2012, 14:54
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: Paginator Zend Framework 2.0 beta

Es raro andresdzphp a mi me funciona correctamente, el adapter es Iterator no ?, con respecto a lo otro tómalo con pinzas es una apreciación mía, antes lo tenias de esa forma, de todas formas, que te parece mas claro ?

MyAwesomeController
Código PHP:
Ver original
  1. $this->getEvent()->getRouteMatch()->getParam('foo');

o

Código PHP:
Ver original
  1. $this->getRequest()->query()->get('foo');
  2. $this->getRequest()->post()->get('foo');

en el contexto del controller me parece mas claro "atacar" el request, en otro como el module me parece mas claro routeMatch

MyAwesomeModule
Código PHP:
Ver original
  1. $events->attach('ZfcUser\Controller\UserController', 'dispatch', function($e) {
  2.     if('register' == $e->getRouteMatch()->getParam('action')){              
  3.         $result = $e->getResult();
  4.         if($result instanceof ViewModel){
  5.             $result->setTemplate('user/login.phtml');  
  6.         }
  7.         //silently ignore ?
  8.     }            
  9. }, -101);
__________________
http://es.phptherightway.com/
thats us riders :)
  #49 (permalink)  
Antiguo 04/03/2012, 16:04
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: Paginator Zend Framework 2.0 beta

Es lo que estuve pensando, aunque como tal, si tienes el parámetro de page como parte de la ruta, es necesario sacarlo así, ya que no es parte ni de GET, ni de POST:

/album/page/1/?foo=bar

Justamente me encontre un issue en el ZFTracker, y creo por eso que es importante rescatar en este caso el parámetro desde el RouteMatch, o cambiar la ruta y usar el parámetro de GET y POST como debe de ser, todo depende de como se arme la estructura, a mi me gusta usar las rutas para que se vean más limpias, pero como todo en Zend, todo es configurable
  #50 (permalink)  
Antiguo 04/03/2012, 16:25
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Paginator Zend Framework 2.0 beta

Si eso estuve pensando, no es parte ni de POST ni de GET, le estuve haciendo dump a los métodos y sólo me sale en getEvent(). Voy a ver si mejor lo hago por GET, pero me gusta mucho el ejemplo del router que me diste.

Cómo hago para optimizar el paginador para no pasar todo el result set? qué se puede usar con ese modelo usando TableGateway?

Se está usando este model:

Código PHP:
Ver original
  1. <?php
  2.  
  3. namespace Album\Model;
  4.  
  5. use Zend\Db\TableGateway\TableGateway,
  6.     Zend\Db\Adapter\Adapter,
  7.     Zend\Db\ResultSet\ResultSet;
  8.  
  9. class AlbumTable extends TableGateway
  10. {
  11.     public function __construct(Adapter $adapter = null, $databaseSchema = null,
  12.         ResultSet $selectResultPrototype = null)
  13.     {
  14.         return parent::__construct('cds', $adapter, $databaseSchema,
  15.             $selectResultPrototype);
  16.     }
  17.    
  18.     public function fetchAll()
  19.     {
  20.         $resultSet = $this->select();
  21.         return $resultSet;
  22.     }
  23.    
  24.     public function getAlbum($id)
  25.     {
  26.         $id = (int) $id;
  27.         $rowset = $this->select(array('id' => $id));
  28.         $row = $rowset->current();
  29.         if (!$row) {
  30.             throw new \Exception("Could not find row $id");
  31.         }
  32.         return $row;
  33.     }
  34.    
  35.     public function addAlbum($artist, $title)
  36.     {
  37.         $data = array(
  38.             'artist' => $artist,
  39.             'title' => $title
  40.         );
  41.         $this->insert($data);
  42.     }
  43.    
  44.     public function updateAlbum($id, $artist, $title)
  45.     {
  46.         $data = array(
  47.             'artist' => $artist,
  48.             'title' => $title
  49.         );
  50.         $this->update($data, array('id', $id));
  51.     }
  52.    
  53.     public function deleteAlbum($id) {
  54.         $this->delete(array('id' => $id));
  55.     }
  56. }

y el controller:

Código PHP:
Ver original
  1. public function indexAction()
  2.     {
  3.         $data = $this->albumTable->fetchAll();
  4.  
  5.         $matches = $this->getEvent()->getRouteMatch();
  6.         $nPage = $matches->getParam('page', 1);
  7.        
  8.         $paginator = Paginator::factory($data->toArray());
  9.         $paginator->setDefaultItemCountPerPage(5);
  10.        
  11.         $paginator->setCurrentPageNumber($nPage);
  12.        
  13.         return new ViewModel(array(
  14.             'albums' => $paginator
  15.         ));
  16.     }

Gracias por los comentarios.

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #51 (permalink)  
Antiguo 04/03/2012, 16:48
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: Paginator Zend Framework 2.0 beta

No lo había mirado, podes pasar el link al issue @GatorV, quiero ver el comentario de la gente de Zend y creo que todas las rutas deben estar definidas y acceder a los parámetros a través del request(en el contexto del controller), teniendo en cuenta que se apunta a cada vez menos magia.

@andresdzphp, TableGateway tiene como propiedad el select. asi que con hacer algo así:

Código PHP:
Ver original
  1. $tableGateway->getSqlSelect();

deberia ser suficiente.

PD: que se dejen de j... con el DB y me armen el admin module de una vez .

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #52 (permalink)  
Antiguo 04/03/2012, 17:24
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: Paginator Zend Framework 2.0 beta

Este es el issue, aunque el único comentario es mio .

El usuario que lo abrió propone un "parche" para inyectar los parámetros al request, aunque te digo, no me convence del todo porque precisamente, es parte de la ruta, no es parte del GET ni del POST...

De hecho en la lista de los controllers, más bien en la documentación indica esto:

Cita:
12.5.1.1. InjectApplicationEvent
The Zend\Mvc\InjectApplicationEvent interface hints to the Application instance that it should inject its MvcEvent into the controller itself. Why would this be useful?

Recall that the MvcEvent composes a number of objects: the Request and Response, naturally, but also the router, the route matches (a RouteMatch instance), and potentially the "result" of dispatching.

A controller that has the MvcEvent injected, then, can retrieve or inject these. As an example:

Código PHP:
Ver original
  1. $matches = $this->getEvent()->getRouteMatch();
  2. $id      = $matches->getParam('id', false);
  3. if (!$id) {
  4.     $this->getResponse();
  5.     $response->setStatusCode(500);
  6.     $this->getEvent()->setResult('Invalid identifier; cannot complete request');
  7.     return;
  8. }
The InjectApplicationEvent interface defines simply two methods:

Código PHP:
Ver original
  1. use Zend\EventManager\EventDescription as Event;
  2.  
  3. public function setEvent(Event $event);
  4. public function getEvent($event);
Por lo que creo que no van a cambiar eso, debes de usar el RouteMatch para sacar los parámetros de la ruta, y no usar ni GET, ni POST...
  #53 (permalink)  
Antiguo 04/03/2012, 17:49
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: Paginator Zend Framework 2.0 beta

Viéndolo desde el punto de vista de que es una ruta tiene sentido, aunque sera interesante ver la respuesta de R. Schindler.
__________________
http://es.phptherightway.com/
thats us riders :)

Etiquetas: 2.0, beta, control, framework, pagination, paginator
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 09:49.