2012-01-25 9 views
5

Tengo un comportamiento irregular usando el controlador Zend _redirect método.Zend _redirect error: Prepends base url dos veces

Mi copia de la aplicación se obtiene a través de un enlace simbólico en mi DocumentRoot. También mi router por defecto es personalizado para responder a este patrón:

http://localhost/<appSymLink>/<param_A>/<controller>/<action>/

desde un controlador, construyo una URL de este modo:

$url = $this->_helper->url('action', 'controller', $param_A = 'valueA');

Si puedo acceder a la url:

http://localhost/<appSymLink>/<param_A>/<controller>/<action>/

Esta variable contiene la siguiente cadena:

/<appSymLink>/<param_A>/<controller>/<action>/

Y cuando llamo

$this->_redirect($url);

El usuario es redirigido de forma explícita a este camino, con rutas redundantes de base.

/<appSymLink>/<appSymLink>/<param_A>/<controller>/<action>/

Zend parece estar anteponiendo la ruta de la base dos veces.

La copia de la aplicación de mi compañero de trabajo vive en su DocumentRoot, y él no está experimentando este problema.

Definición de una ruta de la base vacía dentro de la acción, justo antes de la operación, funciona de esta manera:

$this->getRequest()->setBaseUrl('');

Esto no es una solución factible obviamente. Por otro lado, hacer esto dentro de un complemento de controlador en routeShutdown elimina ambas instancias del directorio de la aplicación.

¿Alguien tiene consejo para una solución a este problema, o algún consejo para mirar más adentro?

Respuesta

6

Si está redireccionando con una URL generada desde el Url helper, debe informar al redireccionador que ya tiene como prefijo la URL base.

Sólo tiene que utilizar la siguiente

return $this->redirect($url, array('prependBase' => false)); 
4

Probar y ajustar la opción de prependBaseFALSE:
$this->_redirect($url, array('prependBase' => FALSE);

Excerpt from ZF reference:

_redirect($url, array $options = array()): redirect to another location. This method takes a URL and an optional set of options. By default, it performs an HTTP 302 redirect.

The options may include one or more of the following:

exit: whether or not to exit immediately. If requested, it will cleanly close any open sessions and perform the redirect.

You may set this option globally within the controller using the setRedirectExit() accessor.

prependBase: whether or not to prepend the base URL registered with the request object to the URL provided.

You may set this option globally within the controller using the setRedirectPrependBase() accessor.

code: what HTTP code to utilize in the redirect. By default, an HTTP 302 is utilized; any code between 301 and 306 may be used.

You may set this option globally within the controller using the setRedirectCode() accessor.

si este trabajo dosis no puedo sugerir el ayudante de acción 'redirector' de uso común:
$this->_helper->getHelper('Redirector')->gotoSimple($action, $controller = null, $module = null, array $params = array())
Action Helper Redirector