php zend-framework url-rewriting

php - Reescrituras simples en Zend Framework



zend-framework url-rewriting (2)

Parece una pregunta muy simple, pero solo he encontrado respuestas complicadas. Tengo una aplicación de Zend Framework que requiere que los usuarios inicien sesión. El loginAction() y logoutAction() se definen en AuthController . Quiero permitir a los usuarios iniciar sesión a través de http://www.example.com/login en lugar de http://www.example.com/auth/login .

Sé que hay numerosas maneras de hacerlo, las 3 que he considerado son:

  1. .htaccess reescribir
  2. Creando un LoginController y redirigiendo el indexAction () a auth / login
  3. Definir mis propias rutas usando Zend_Controller_Router_Rewrite.

Preferiría mantenerlo fuera del # 1 si es posible. # 2 es bastante fácil de entender, aunque parece un truco. También podría saturar el código con un grupo de 5 clases de "Controladores". Creo que # 3 es el camino a seguir, pero no entiendo completamente cómo usarlo de manera efectiva. He intentado usar Zend_Config con RewriteRouter, aunque solo definí la ruta de inicio de sesión, por lo que cada enlace se convirtió en ''/ login'' (creo que me faltaba una ruta predeterminada). Hice esto en mi Bootstrap.php, no estoy seguro si eso fue correcto.

¿Hay un enfoque simple que me falta? ¿Estoy usando el # 3 incorrectamente? ¿Hay tutoriales para esto que deba leer? (He examinado la documentación de Zend que es buena, pero a menudo me pregunto: ''¿A dónde debe ir este código: en un controlador, modelo, arranque, otro?'')


En caso de que estés interesado en cómo hacerlo en tu bootstrab de la manera correcta.

Si solo tiene una ruta para reescribir, solo agregue función:

protected function _initRoute() { $router = Zend_Controller_Front::getInstance()->getRouter(); $router->addRoute(''login'', //key of route ! new Zend_Controller_Router_Route( ''login'', //this is url(www.url.com/login) that you want to rewrite, you can set whatever you want array( ''module'' => ''default'', ''controller'' => ''auth'', ''action'' => ''login'', ) )); }

Ahora, cada solicitud de inicio de sesión de www.your-url.com/ apuntará a www.your-url.com/default/auth/login (module / controller / action)

Editar:

Si desea usar su nueva url en el archivo de vista, debe usar la clave para esa ruta

en view.phtml

<a href="<?php echo $this->url(array(), ''login''); ?>"> [link] </a>

El primer parámetro es array (), y el segundo es la clave que define en bootstrap. Si cambias la URL a / new-login en el arranque, todas las URL se cambiarán en los archivos de vista.


para un propósito definido como si tuviera una ruta "con nombre" sería la forma más sencilla de hacerlo. Si bien hay varias formas de implementar una ruta con nombre, lo más fácil es colocarlo en la aplicación.ini:

// /application/configs/application.ini resources.router.routes.login.route = /login resources.router.routes.login.defaults.module = default resources.router.routes.login.defaults.controller = auth resources.router.routes.login.defaults.action = login

Ponerlo en tu bootstrap no está mal, simplemente no me parece tan conveniente.
También hacerlo de esta manera (sin garantías) debería evitar cualquier problema con las rutas predeterminadas.

Cuando se llama a una ruta usando el helper url (), es importante recordar usar la ruta nombrada:

<?php echo $this->url(array(), ''routeName'') ?>

o si necesita pasar el ''controlador'' normal =>, ''acción'' =>:

<?php echo $this->url(array(''controller'' => ''index'', ''action'' => ''index''), ''default'') ?>

cerca, como puedo decir ''predeterminado'' en este contexto, indica que esta sería una ruta predeterminada como se define en Zend / Controller / Router / Route / Module.php