2010-01-04 8 views
5

Estoy tratando de crear un sistema de inicio de sesión con Zend que cuando un usuario intenta acceder a una página restringida será llevado a una página de inicio de sesión si no están 's inicie sesión. El problema que estoy teniendo es obtener la URL a la que estaban intentando acceder de antemano. ¿Hay una función Zend que devolverá todo después de la URL base? Por ejemplo, necesito "moduleName/controllerName/ActionName/param1/value1/param2/value2" etc etc. para enviar como un parámetro querystring a la página de inicio de sesión (por ejemplo: login /? Redirect = controllerName/actionName/param1/value1/param2/value)Zend - Obtener todo después de la base Url (Controlador, Acción y cualquier parámetro)

Puedo obtener el nombre del controlador y la acción, y obtengo los parámetros, pero ya incluye el módulo, el controlador y la acción también. Me gustaría obtener lo que necesito. Trabajé el largo camino de hacerlo de esta manera:

$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); 

pero aun así termino con params como módulo/admin/controlador/index/etc, que no quiero. Entonces, ¿cómo puedo obtener todo como una cadena como está en la URL o al menos solo los parámetros en una cadena sin el controlador y la acción como valores de param?

** EDIT: Aquí está mi solución actual, pero no tiene que ser una forma más elegante de hacer esto **

  $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); 

Respuesta

3

Creo que se puede pasar a lo largo de la última petición URI de la siguiente manera:

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

Parece un buen candidato pero también devuelve la baseUrl. ¿Hay alguna forma de obtener todo comenzando con/moduleName/controllerName/actionName/param1/value1/param2/value2? – Ryan

+1

Para obtener todo después de la baseUrl, no tengo una solución a mano. En mi situación, después de iniciar sesión, tomo el URI completo y lo redirecciono de la siguiente manera: '$ this -> _ redirigir ($ full_url, array ('prependBase' => false));' ¿Eso ayuda? –

+0

Hola, Derek, no sabía que _redirect tomó ese conjunto de opciones con la opción prependBase. Eso es bueno saber, gracias. Por ahora tengo todo configurado como se menciona en mi edición anterior, pero puede cambiar a esto en algún momento. Gracias. – Ryan

0

Usted podría tratar de usar urlencode() y urldecode() para codificar/decodificar las cadenas param individuales. Un ejemplo sería:

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

Estoy buscando una solución usando Zend Framework. No tengo el camino, y me gustaría obtener todos los parámetros que están incluidos en la solicitud original – Ryan

2

Sé que es una vieja pregunta, pero para futuras referencias:

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

que debe conseguir lo que quiere ..

1

pregunta Viejo pero heres thats de una solución trabajó para mi. Desde aquí es posible que desee url codificarlo etc

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

idea de por qué Zend no tiene esta característica, pero esta es la forma en que he logrado. Mi caso de uso fue que quería redirigir las URL antiguas que iban directamente a los controladores que usaban el enrutamiento predeterminado, a una nueva estructura de URL de API que usaba rutas.

$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)); 
Cuestiones relacionadas