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

No puedo crear url con $this->url en ZF2

Estas en el tema de No puedo crear url con $this->url en ZF2 en el foro de Zend en Foros del Web. Hola buenas tardes, Estoy usando ZendFramework 2 beta 5 rc 6. No he podido mostrar un enlace a un controlador en la vista del layout ...
  #1 (permalink)  
Antiguo 04/09/2012, 12:01
 
Fecha de Ingreso: julio-2011
Ubicación: Zapopan, Jal. MX
Mensajes: 316
Antigüedad: 11 años, 1 mes
Puntos: 32
No puedo crear url con $this->url en ZF2

Hola buenas tardes,

Estoy usando ZendFramework 2 beta 5 rc 6.

No he podido mostrar un enlace a un controlador en la vista del layout que tengo en un modúlo, pues solo me retorna la url del módulo y no del controlador.

Configuré module.config.php de la misma forma que el módulo Application que viene de ejemplo en el esqueleto, con el fin de acceder a las url de esta manera:

Cita:
mimodulo/[:controller[/:action]]
Ya he accedido de esa forma sin problemas, por ejemplo: http://example.com/mimodulo/uncontrolador/unaaccion.

Entonces no entiendo por que al usar $this->url() no me da el enlace al controlador solo al módulo.

La forma en que uso este view helper es así:

Código PHP:
Ver original
  1. <a href="<?=$this->url('mimodulo', array('controller' => 'uncontrolador'));?>">Ir a uncontrolador</a>
  2. // La sálida es:
  3. // <a href="http://miweb.com/mimodulo">Ir a un controlador</a>
  4. // Pero yo quiero:
  5. // <a href="http://miweb.com/mimodulo/uncontrolador">Ir a un controlador</a>

No pongo el action ya que por default me deberia llevar a indexAction de ese controlador, pero como digo, solo me da el enlace del módulo. El cual lleva al indexAction del IndexController, ¿cuál es el problema?, gracias.
  #2 (permalink)  
Antiguo 04/09/2012, 12:53
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 14 años, 7 meses
Puntos: 845
Respuesta: No puedo crear url con $this->url en ZF2

Si copiaste tal cual la config la ruta debería ser mimodule/default, si solo dejas mimodule estas haciendo match del literal...

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

Última edición por masterpuppet; 04/09/2012 a las 12:59 Razón: typo
  #3 (permalink)  
Antiguo 04/09/2012, 13:04
Avatar de lisandro Arg  
Fecha de Ingreso: octubre-2003
Ubicación: Cordoba, Argentina
Mensajes: 945
Antigüedad: 18 años, 10 meses
Puntos: 24
Respuesta: No puedo crear url con $this->url en ZF2

Tiene accion index "uncontrolador" ?
Si le pasas "unaaccion" debería funcionar o tienes algo distinto en las rutas.
  #4 (permalink)  
Antiguo 04/09/2012, 13:08
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 16 años, 2 meses
Puntos: 2135
Respuesta: No puedo crear url con $this->url en ZF2

El primer parámetro para el URL helper es el nombre de la ruta, y la segunda son las opciones, ¿como configuraste el router?.

Saludos.
  #5 (permalink)  
Antiguo 04/09/2012, 13:30
 
Fecha de Ingreso: julio-2011
Ubicación: Zapopan, Jal. MX
Mensajes: 316
Antigüedad: 11 años, 1 mes
Puntos: 32
Respuesta: No puedo crear url con $this->url en ZF2

Hola, agradezco sus respuestas, lo mejor es dejar la configuración del enrutamiento.

module.config.php
Código PHP:
Ver original
  1. <?php
  2.  
  3. return array(
  4.     'router' => array(
  5.         'routes' => array(
  6.             'home' => array(
  7.                 'type' => 'Zend\Mvc\Router\Http\Literal',
  8.                 'options' => array(
  9.                     'route'    => '/',
  10.                     'defaults' => array(
  11.                         'controller' => 'MyAccount\Controller\Index',
  12.                         'action'     => 'index',
  13.                     ),
  14.                 ),
  15.             ),
  16.             // The following is a route to simplify getting started creating
  17.             // new controllers and actions without needing to create a new
  18.             // module. Simply drop new controllers in, and you can access them
  19.             // using the path /application/:controller/:action
  20.             'myaccount' => array(
  21.                 'type'    => 'Literal',
  22.                 'options' => array(
  23.                     'route'    => '/myaccount',
  24.                     'defaults' => array(
  25.                         '__NAMESPACE__' => 'MyAccount\Controller',
  26.                         'controller'    => 'Index',
  27.                         'action'        => 'index',
  28.                     ),
  29.                 ),
  30.                 'may_terminate' => true,
  31.                 'child_routes' => array(
  32.                     'default' => array(
  33.                         'type'    => 'Segment',
  34.                         'options' => array(
  35.                             'route'    => '/[:controller[/:action]]',
  36.                             'constraints' => array(
  37.                                 'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
  38.                                 'action'     => '[a-zA-Z][a-zA-Z0-9_-]*',
  39.                             ),
  40.                             'defaults' => array(
  41.                             ),
  42.                         ),
  43.                     ),
  44.                 ),
  45.             ),
  46.         ),
  47.     ),
  48.     'service_manager' => array(
  49.         'factories' => array(
  50.             'translator' => 'Zend\I18n\Translator\TranslatorServiceFactory',
  51.         ),
  52.     ),
  53.     'translator' => array(
  54.         'locale' => 'en_US',
  55.         'translation_patterns' => array(
  56.             array(
  57.                 'type'     => 'gettext',
  58.                 'base_dir' => __DIR__ . '/../language',
  59.                 'pattern'  => '%s.mo',
  60.             ),
  61.         ),
  62.     ),
  63.     'controllers' => array(
  64.         'invokables' => array(
  65.             'MyAccount\Controller\Index' => 'MyAccount\Controller\IndexController',
  66.             'MyAccount\Controller\Sell' => 'MyAccount\Controller\SellController',
  67.         ),
  68.     ),
  69.     'view_manager' => array(
  70.         'display_not_found_reason' => true,
  71.         'display_exceptions'       => true,
  72.         'doctype'                  => 'HTML5',
  73.         'not_found_template'       => 'error/404',
  74.         'exception_template'       => 'error/index',
  75.         'template_map' => array(
  76.             'layout/layout'           => __DIR__ . '/../view/layout/layout.phtml',
  77.             'error/404'               => __DIR__ . '/../view/error/404.phtml',
  78.             'error/index'             => __DIR__ . '/../view/error/index.phtml',
  79.         ),
  80.         'template_path_stack' => array(
  81.             __DIR__ . '/../view',
  82.         ),
  83.     ),
  84. );

En base a esto, cuando quiero ir a indexAction de SellController, accedo perfectamente de la siguiente forma: http://example.com/myaccount/sell/index o http://example.com/myaccount/sell

Y cuando ejecuto $this->url('myaccount', array('controller'=>'sell')); me devuelve "http://example.com/myaccount" y yo quiero que me devuelva "http://example.com/myaccount/sell".

¿Qué hago?, gracias :)
  #6 (permalink)  
Antiguo 04/09/2012, 13:58
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 14 años, 7 meses
Puntos: 845
Respuesta: No puedo crear url con $this->url en ZF2

Probaste con lo que te comente en el post anterior ?

Código PHP:
Ver original
  1. $this->url('myaccount/default', array('controller' => 'sell'));
__________________
http://es.phptherightway.com/
thats us riders :)
  #7 (permalink)  
Antiguo 04/09/2012, 15:21
 
Fecha de Ingreso: julio-2011
Ubicación: Zapopan, Jal. MX
Mensajes: 316
Antigüedad: 11 años, 1 mes
Puntos: 32
Respuesta: No puedo crear url con $this->url en ZF2

Cita:
Iniciado por masterpuppet Ver Mensaje
Probaste con lo que te comente en el post anterior ?

Código PHP:
Ver original
  1. $this->url('myaccount/default', array('controller' => 'sell'));

Wow Gracias, de esa forma si funciona es que no había entendido tu comentario anterior hehe. Pero, ¿a que se debe esto?. Lo de myaccount/default, ¿hay manera de que solo sea myaccount? Gracias de nuevo.
  #8 (permalink)  
Antiguo 04/09/2012, 16:38
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 16 años, 2 meses
Puntos: 2135
Respuesta: No puedo crear url con $this->url en ZF2

Si ves la configuración, tienes 3 rutas, la primera "home", la segunda es una compuesta, es decir tienes una ruta y una ruta hija, es por eso que tienes que atacar a "myaccount" y a su hija "default" para generar la ruta.

Saludos.
  #9 (permalink)  
Antiguo 04/09/2012, 17:44
 
Fecha de Ingreso: julio-2011
Ubicación: Zapopan, Jal. MX
Mensajes: 316
Antigüedad: 11 años, 1 mes
Puntos: 32
Respuesta: No puedo crear url con $this->url en ZF2

Cita:
Iniciado por GatorV Ver Mensaje
Si ves la configuración, tienes 3 rutas, la primera "home", la segunda es una compuesta, es decir tienes una ruta y una ruta hija, es por eso que tienes que atacar a "myaccount" y a su hija "default" para generar la ruta.

Saludos.
Ok gracias y ¿es posible configurarlo sin tener que atacar a su hija? :)
  #10 (permalink)  
Antiguo 04/09/2012, 18:13
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 14 años, 7 meses
Puntos: 845
Respuesta: No puedo crear url con $this->url en ZF2

Has probado cambiar la ruta Literal por la Segment ?, las opciones por defecto del Segment deberian ser las de Literal ;)

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

Etiquetas: beta5, helper, rc6, url, view, zendframework2, zf2
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 19:41.