2010-02-11 5 views
0

Je soumets un élément <form method="get"> normal à l'URL actuelle ... Cela fait partie d'une page de recherche. L'URL résultante est ci-dessous.
http://domain.com/module/controller/action/get1/value1/?get2=get2&value3=value3
Le problème est que je utilise <?= $this->url(array('page' => x)); ?> et semblable à naviguer autour mais je veux retenir les $_GET params ... Chaque fois que je l'utilise, il conserve le / sabré $_GET params et les paires de desserre valeur ?&= ...
Je veux utiliser mod_rewrite pour changer les paires de valeurs à barres obliques ... Ma règle actuelle est ..Zend_Router ... Zend_Form ... Mod_Rewrite ... Réécrire l'URL obtenir des paires de valeur à des barres obliques

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ zend.php [NC,L] 

Je ne suis pas à l'aise avec mod_Rewrite et je ne veux pas entrer en conflit avec les règles existantes.

Je aime aussi un slash ainsi ... alors ce serait un bonus ...

S'il vous plaît aider !! Un grand merci ...

PS ... Re "Zend_Router ... Zend_Form .." dans le titre. J'utilise Zend_Form pour construire le formulaire et je me rends compte que je pourrais utiliser javascript sur la fonction onSubmit pour écrire l'URL ... De même je pourrais utiliser le Zend_Router pour réécrire l'url ... Je pense que Mod_rewrite est le meilleur si ...

Répondre

0

je ne pouvais pas trouver un moyen agréable de le faire. .. donc j'ai résolu d'écrire du code PHP minimisé en haut de mon zend.php.

list($sURL, $sQuery) = explode('?', $_SERVER['REQUEST_URI']); 
$sOriginalURL = $sURL; 
if ('/' !== substr($sURL, -1)) $sURL .= '/'; 
if (isset($sQuery)) { 
    foreach (explode('&', $sQuery) as $sPair) { 
     if (empty($sPair)) continue; 
     list($sKey, $sValue) = explode('=', $sPair); 
     $sURL .= $sKey . '/' . $sValue . '/'; 
    } 
} 
if (isset($sQuery) || $sOriginalURL !== $sURL) header(sprintf('Location: %s', $sURL)); 

Si quelqu'un peut améliorer cela, veuillez commenter ci-dessous.

0

Je ne sais pas comment mettre en œuvre, en utilisant des expressions régulières et mod_rewrite, mais vous pouvez étendre Zend_Controller_Router_Route comme celui-ci et de l'utiliser routeur à la place standard:

<?php 
class ZendY_Controller_Router_Route_GetAware extends 
     Zend_Controller_Router_Route 
{ 
    public static function getInstance(Zend_Config $config) 
    { 
     $reqs = ($config->reqs instanceof Zend_Config) 
       ? $config->reqs->toArray() : array(); 
     $defs = ($config->defaults instanceof Zend_Config) 
       ? $config->defaults->toArray() : array(); 
     return new self($config->route, $defs, $reqs); 
    } 

    public function match($path) 
    { 
     foreach ($_GET as $k => $v) { 
      if (is_array($v)) { 
       $v = implode(',', $v); 
      } 
      $path .= "{$this->_urlDelimiter}{$k}{$this->_urlDelimiter}{$v}"; 
     } 
     parent::match($path); 
    } 
} 
Questions connexes