Pergunta

Usando o Zend Framework e o método url para a visualização:

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

Onde route_name é o nome da rota da url e cada campo# é recuperado do banco de dados.

Percebi que, por padrão, ele altera os espaços nos nomes do Controlador/Ação para um sinal de mais, para que fique assim:

www.example.com/this is my example

para

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

Eu gostaria de mudar o separador de + para - para ter algo como

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

Eu sei que outro tópico: Como alterar o caractere de separação do Zend Url?conforme documentado uma maneira de fazer isso que tentei sem sucesso.

Uma explicação completa sobre como fazer isso seria muito apreciada.

EDITAR2:Eu sei onde está o problema se alguém estiver interessado, vem da forma como a url é montada, ele usa urlencode que converte todos os caracteres não alfanuméricos esperados - e _ e os espaços como +, não há como substituir isso do que substituir o personagem cria a url manualmente (como sugeriu Maxime) ou cria uma função de url personalizada substituindo os caracteres (como sugerido por aporat) ...

Obrigado!

Foi útil?

Solução

Se você realmente quiser fazer isso, você pode estender o estoque Zend_View_Helper_Url view helper e adicione sua lógica de URL ao seu view 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));
     }
}

e então basta carregar seu novo auxiliar de visualização e pronto:

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

Outras dicas

Infelizmente, você não pode definir nada antes de ligar para o url(...) função para alcançar o que você deseja fazer.A razão é que quando a URL é montada, ela usa o php urlencode(...) função.

Dito isto, você ainda tem muitas opções:

1) Você simplesmente não usa o url(...) função e crie seus URLs manualmente.(Melhor opção)

2) Você cria um novo ajudante que age como url(...) mas adicione alterações extras à função para conseguir o que deseja fazer.

3) Você pega a saída da função url(...) e faz um str_replace mudar + com -.(NÃO recomendo essa opção)

Pessoalmente, crio todos os meus URLs manualmente para evitar esse tipo de problema.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top