Domanda

Utilizzo del quadro zend e del metodo dell'URL per la vista:

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

Dove Route_Name è il nome del percorso URL e ciascun campo # viene recuperato dal database.

Ho notato che per impostazione predefinita cambia spazi in nomi di controller / azione in più cartello in modo che ciò che sembrasse:

www.example.com/this is my example
.

a

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

Vorrei cambiare il separatore da + a - per avere qualcosa come

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

So che un altro thread: Come cambiare la separazione Carattere di Zend URL? Come documentato un modo per farlo che ho provato senza successo.

Una spiegazione approfondita su come fare sarebbe molto apprezzato.

edit2: so dove si trova il problema Se qualcuno è interessato, viene dal modo in cui l'URL è assemblato, utilizza URLENCODE che converte tutti i caratteri non alfanumerici si aspettano - e _ e gli spazi come +, non c'è modo Per sovrascrivere che la sostituzione del carattere creane manualmente l'URL (come Maxime suggerito) o creare una funzione URL personalizzata che sostituisce i caratteri (come suggerito da Aporat) ...

Grazie!

È stato utile?

Soluzione

Se vuoi veramente farlo, è possibile estendere l'aiutante di visualizzazione Zend_View_Helper_Url e aggiungere la tua logica URL nell'assistente di visualizzazione.

<?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 poi carica il tuo nuovo aiutante e sei a posto per andare:

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

Altri suggerimenti

Sfortunatamente, non è possibile impostare nulla prima di chiamare la funzione url(...) per ottenere ciò che si desidera fare.Il motivo è che quando l'URL è assemblato, utilizza la funzione urlencode(...) PHP.

Detto questo, hai ancora molte opzioni:

1) Semplicemente non utilizzare la funzione url(...) e creare manualmente i tuoi URL.(Migliore opzione)

2) Creare un nuovo aiutante che agisce come url(...) ma aggiungi ulteriori modifiche alla funzione per ottenere ciò che si desidera fare.

3) Si prende l'output della funzione URL (...) e fai un str_replace per modificare + con -.(Non raccomando questa opzione)

Personalmente, creo manualmente tutti i miei URL per evitare questo tipo di problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top