2010-01-04 4 views
5

J'essaie de créer un système de connexion avec Zend que lorsqu'un utilisateur essaie d'accéder à une page restreinte, ils seront pris à une page de connexion si elles sont aren Je ne suis pas connecté. Le problème que je rencontre est d'obtenir l'URL à laquelle ils essayaient d'accéder auparavant. Y at-il une fonction Zend qui retournera tout après l'URL de base? Par exemple, j'ai besoin de "nomModule/NomContrôle/NomAction/param1/valeur1/param2/valeur2" etc. pour être envoyé en tant que paramètre querystring à la page de connexion (ex: login /? Redirect = nom_strateur/nom_action/param1/valeur1/param2/value)Zend - Obtenir tout après base Url (Contrôleur, Action, et tous les paramètres)

Je peux obtenir le nom du contrôleur et de l'action, et j'obtiens les paramètres, mais il inclut également le module, le contrôleur et l'action. Je voudrais juste obtenir ce dont j'ai besoin. Je travaille sur le long chemin de le faire comme ceci:

$controllerName = Zend_Controller_Front::getInstance()->getRequest()->getControllerName(); 
$actionName = Zend_Controller_Front::getInstance()->getRequest()->getActionName(); 
$paramArray = Zend_Controller_Front::getInstance()->getRequest()->getParams(); 
$params = ''; 

foreach($paramArray as $key => $value) 
    $params .= $key . "/" . $value; 

$this->_redirect('/admin/login/?redirect=' . $controllerName . "/" . $actionName . "/" . $params); 

mais même alors je me retrouve avec params comme module/admin/contrôleur/index/etc que je ne veux pas. Alors, comment puis-je obtenir tout comme une chaîne comme dans l'URL ou au moins juste les paramètres d'une chaîne sans le contrôleur et l'action en tant que valeurs param?

** EDIT: Voici ma solution actuelle, mais il se doit d'être une façon plus élégante de le faire **

  $moduleName = $this->getRequest()->getModuleName(); 
      $controllerName = $this->getRequest()->getControllerName(); 
      $actionName = $this->getRequest()->getActionName(); 
      $paramArray = $this->getRequest()->getParams(); 
      $params = ''; 

      foreach($paramArray as $key => $value) 
       if($key <> "module" && $key <> "controller" && $key <> "action") 
        $params .= $key . "/" . $value . "/"; 

      $this->_redirect('/admin/login/?redirect=' . $moduleName . "/" . $controllerName . "/" . $actionName . "/" . $params); 

Répondre

3

Je pense que vous pouvez passer le long de la dernière URI demande comme ceci:

$this->_redirect('/admin/login/?redirect='.urlencode($this->getRequest()->REQUEST_URI)); 
+0

Cela semble être un bon candidat, mais il renvoie également la baseUrl. Est-il possible de tout simplement commencer par/moduleName/controllerName/nomaction/param1/valeur1/param2/valeur2 ?? – Ryan

+1

Pour obtenir tout après la baseUrl, je n'ai pas de solution en main. Dans ma situation, après la connexion, je prends simplement l'URI complète et la redirige comme suit: '$ this -> _ redirect ($ full_url, array ('prependBase' => false));' ' Cela aide-t-il? –

+0

Hey Derek, je n'étais pas au courant que _redirect a pris ce tableau d'options avec l'option prependBase. C'est bon à savoir, merci. Pour l'instant, j'ai tout configuré comme mentionné dans mon édition ci-dessus, mais peut passer à cela à un moment donné. Merci. – Ryan

0

Vous pouvez essayer d'utiliser urlencode() et urldecode() pour encoder/décoder les chaînes individuelles param. Un exemple serait:

// outputs %2Fpath%2Fto%2Ffile.php 
$path = '/path/to/file.php'; 
echo urlencode($path); 
+0

Je suis à la recherche d'une solution utilisant Zend Framework. Je n'ai pas le chemin, et je voudrais obtenir tous les paramètres qui sont inclus dans la demande originale – Ryan

2

Je sais que une vieille question, mais pour les futures références:

$this->getRequest()->getRequestUri(); 

qui devrait vous obtenir ce que vous voulez ..

1

question ancienne mais Heres une thats solution travaillé pour moi. De là, vous pouvez encoder url etc

 
$currentRoute = substr($this->getRequest()->getRequestUri(),strlen($this->getRequest()->getBaseUrl())); 
2

Aucune idée pourquoi Zend ne possède pas cette fonctionnalité, mais voilà comment je l'ai accompli cela. Mon cas d'utilisation était que je voulais rediriger les anciennes URL qui allaient directement aux contrôleurs en utilisant le routage par défaut, vers une nouvelle structure d'URL d'API qui utilisait des routes.

$filtered_params = array_diff_key(
    $this->_request->getParams(), 
    array_fill_keys(array('controller', 'module', 'action'), 1) 
); 

$this->_redirect('/api/1.0/?' . http_build_query($filtered_params)); 
Questions connexes