Question

Utilisation du Zend Framework et de la méthode url pour la vue :

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

Où route_name est le nom de la route URL et chaque numéro de champ est récupéré de la base de données.

J'ai remarqué que par défaut, il change les espaces dans les noms de contrôleur/action en signe plus, de sorte que ce qui ressemble à :

www.example.com/this is my example

à

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

Je voudrais changer le séparateur de + à - pour avoir quelque chose comme

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

Je sais qu'un autre sujet : Comment changer le caractère de séparation du Zend Url ?comme documenté, une façon de le faire que j'ai essayée sans succès.

Une explication détaillée sur la façon de procéder serait très appréciée.

EDIT2 :Je sais où se situe le problème si quelqu'un est intéressé, cela vient de la façon dont l'url est assemblée, il utilise le code urlen qui convertit tous les caractères non alphanumériques attendus - et _ et les espaces en +, il n'y a aucun moyen de remplacer cela plutôt que de le remplacer le personnage crée l'url manuellement (comme l'a suggéré Maxime) ou crée une fonction d'url personnalisée remplaçant les caractères (comme le suggère aporat)...

Merci!

Était-ce utile?

La solution

Si vous voulez vraiment faire cela, vous pouvez étendre l'aide de la vue STOCKENODICETAGCode et ajoutez votre logique URL dans votre assistant de vue.

<?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));
     }
}

Ensuite, chargez simplement votre nouvel assistant de vue et vous êtes prêt à partir:

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

Autres conseils

Malheureusement, vous ne pouvez rien régler avant d'appeler le url(...) fonction pour réaliser ce que vous voulez faire.La raison est que lorsque l'URL est assemblée, elle utilise le php urlencode(...) fonction.

Cela dit, vous avez encore de nombreuses options :

1) Vous n'utilisez tout simplement pas le url(...) fonction et créez vos URL manuellement.(Meilleure option)

2) Vous créez un nouvel assistant qui agit comme url(...) mais ajoutez des modifications supplémentaires à la fonction pour réaliser ce que vous voulez faire.

3) Vous prenez la sortie de la fonction url(...) et faites un str_replace changer + avec -.(Je ne recommande PAS cette option)

Personnellement, je crée toutes mes URL manuellement pour éviter ce genre de problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top