Pregunta

Usando Zend Framework y el método de URL para la vista:

$this->url(array('field1' => this, 'field2' => 'is', 'field3' => 'my example'), 'route_name');

Donde nombre_ruta es el nombre de la ruta URL y cada número de campo se recupera de la base de datos.

Noté que, de forma predeterminada, cambia los espacios en los nombres de Controlador/Acción a un signo más para que se vea así:

www.example.com/this is my example

a

www.example.com/this+is+my+example

Me gustaría cambiar el separador de + a - para tener algo como

www.example.com/this-is-my-example

Sé que hay otro hilo: ¿Cómo cambiar el carácter de separación de Zend Url?como está documentado una forma de hacerlo que probé sin éxito.

Se agradecería mucho una explicación detallada sobre cómo hacerlo.

EDITAR2:Sé dónde radica el problema si alguien está interesado, proviene de la forma en que se ensambla la URL, utiliza código URL que convierte todos los caracteres no alfanuméricos excepto - y _ y los espacios como +, no hay forma de anular eso en lugar de reemplazarlo. el personaje crea la URL manualmente (como sugirió Maxime) o crea una función de URL personalizada que reemplaza los caracteres (como lo sugiere aporat)...

¡Gracias!

¿Fue útil?

Solución

Si realmente desea hacerlo, puede extender el Ayudador de la vista de GentacodiCetAdode de stock y agregue su lógica de URL a su visión Helper.

<?php
namespace Application\View\Helper;

 class MyUrl extends \Zend_View_Helper_Url
 {
    /**
     * Generates an url given the name of a route.
     *
     * @access public
     *
     * @param  array $urlOptions Options passed to the assemble method of the Route object.
     * @param  mixed $name The name of a Route to use. If null it will use the current Route
     * @param  bool $reset Whether or not to reset the route defaults with those provided
     * @return string Url for the link href attribute.
     */
     public function myUrl(array $urlOptions = array(), $name = null, $reset = false, $encode = true)
     {

     return str_replace('+', '-', parent::url($urlOptions, $name, $reset, $encode));
     }
}

y luego solo cargue su nuevo ayudante de vista y está listo para ir:

        $helper = new \Application\View\Helper\MyUrl;
        $this->view->registerHelper($helper, 'myUrl');

Otros consejos

Desafortunadamente, no puedes configurar nada antes de llamar al url(...) función para lograr lo que desea hacer.La razón es que cuando se ensambla la URL, utiliza el php urlencode(...) función.

Dicho esto, todavía tienes muchas opciones:

1) Simplemente no usas el url(...) funcione y cree sus URL manualmente.(Mejor opción)

2) Creas un nuevo ayudante que actúa como url(...) pero agregue cambios adicionales a la función para lograr lo que desea hacer.

3) Tomas la salida de la función url(...) y haces un str_replace cambiar + con -.(NO recomiendo esa opción)

Personalmente, creo todas mis URL manualmente para evitar este tipo de problemas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top