Problema con render_partial

Buenos dias,

Tengo mi controlador application que me redirige al controlador index/home
para que cuando no le indique ningun controlador me muestre la pantalla incial, esta pantalla parseo 2 partial con sus correspondientes plantillas
class IndexController extends ApplicationController {
		
		public $template = "menu_admin";
		
		function home(){
			$this->render_partial('alertas/usuarios');
			$this->render_partial('alertas/empresas');
		}
	}

Tambien tengo en el metodo before_filter para validar la sesion del usuario, esta la copie del tutorial que hay en la web adaptandola a mis necesidades.
class ControllerBase {
				
		function init(){
			Kumbia::route_to("controller: index", "action: home");
		}
		
		public function before_filter(){
			$controlador = $this->controller_name;;
			$accion = $this->action_name;
			
			if($controlador!='admin'){
				if(!Session::isset_data('usuarios_id')){
					$this->route_to('controller: admin', 'action: valida');
				}
			}
		}
}

Y por ultimo tengo el controlador que se encarga de realizar la gestio de lavidacion del usuario
class AdminController extends ApplicationController {

		/**
		 * Aqui sale el formulario de Iniciar Sesión
		 *
		 */
		public function index(){
			
		}

		/**
		 * Esta accion es ejecutada por application/before_filter en caso
		 * de que el usuario trate de entrar a una accion a la cual
		 * no tiene permiso
		 *
		 */
		public function no_acceso(){

		}

		/**
		 * Validacion si el login y el password son correctos
		 */
		public function valida(){
			if($this->Usuarios->find_first("login = '{$this->request('login')}'
							and password = md5('{$this->request('password')}')")){
				/**
				 * Almaceno en la variable de session el id del usuario
				 * autenticado
				 */
				Session::set_data('usuarios_id', $this->Usuarios->id);
				/**
				 * Lo redireccionos al formulario de clientes
				 */
				return $this->redirect('backend/index/home');
			} else {
				Flash::error('Usuario/Clave incorrectos');
				return $this->route_to('action: index');
			}

		}
		
		
		public function salir(){
			Session::unset_data('usuarios_id');
			Flash::notice('La session se ha cerrado');
			return $this->route_to('action: index');
		}

	}

El problema viene cuando el suaurio no esta logado, que me muestra la pantalla de login, pero a la vez tambien me muestra los 2 partial.

Entiendo que el metodo de login debera finalizar la ejecucion y no dejar que siga ejecutandose.

Para mayor claridad adjunto una imagen.

Comentarios

  • Que version utilizas?
  • edited 7:39
    Pues la version es la 0.5 Actualizada constantemente por svn

    Saludos
  • Ok te explico algo rapido creo entender tu problema...


    $this->Usuarios->find_first("login = '{$this->request('login')}'
    and password = md5('{$this->request('password')}')")


    ahi en esa evaluacion veo el problema mi recomendacion seria que primero preguntes si ese usuario existe, es decir las mismas condicones pero utilizando el metodo exist()...

    Porq veo que el entra en ambas condiciones y por ende te muestra los partial porq hace el redirect
  • edited 7:39
    El metodo exist() de que clase es?

    Saludos
  • es parte del API de ActiveRecord...
  • edited 7:39
    Buenas,

    He probado a cambiar el metodo por exists(), pero el resultado sigue siendo igual.

    No se si tendra algo que ver, pero para el resto de controladores me funciona bien y extienden de StandardForm y el controlador index/home, que es el que llama a los render_partial extiende de ApplicationController.

    Saludos
  • edited 7:39
    Otro problema que he observado es el siguiente.

    Si escribo la URL: <!-- m --><a class="postlink" href="http://kumbia.topcargas/backend/">http://kumbia.topcargas/backend/</a><!-- m -->

    Me muestra el formulario de login y me parsea los 2 partia, con lo cual falla.

    Si escribo la URL: <!-- m --><a class="postlink" href="http://kumbia.topcargas/backend/aeropuertos">http://kumbia.topcargas/backend/aeropuertos</a><!-- m -->

    Me muestra el siguiente error:

    Fatal error: Class 'AdminController' not found in \library\kumbia\generator\generator.php(102) : eval()'d code on line 1

    Pero si a aeropuertos le creo un metodo llamado index() ya no falla con lo cual he llegado a la conclusion de que necesita leer el metodo index. Para evitar tener que escribirlo en todos los controladores, lo he creado en el fichero application, del cual heredan todo los controladores.

    Pues bien si lo creo en applicatio tambien falla, al igual que pasaba cuando no tenia el metodo index()

    Saludos
  • edited 7:39
    Nadie tiene una idea???

    Saludos
  • edited 7:39
    En la version 0.5 esto se cambio, y los metodos que quieras que esten disponibles desde cualquier parte de la aplicacion los debes poner en /apps/default/helpers/main.php.
  • edited 7:39
    Pero eso son metodos para ser directamente llamados desde la plantilla.

    Esto es distinto ya que son clases, y los standform nunca hederan de /helpers/main.php

    Me parece raro que a nadie antes le hay pasado algo parecido.

    Sigo sin poder resolver el problema

    Saludos
  • edited 7:39
    Nadie me puede ayudar??

    Saludos
  • sera que me puedes mostrar el código...
  • edited 7:39
    El codigo lo esta en el 1º post, en el puedes encontrar el

    AdminController -> Clase para administrar la seguridad
    BaseController
    IndexController

    Si necesita algun otro codigo pidemelo.

    Muchas gracias
  • edited 7:39
    Hola a todos,

    Dando vueltas al asunto me he dado cuenta que si cambio
     Flash&#58;&#58;error('Usuario/Clave incorrectos');
     return $this-&gt;route_to('action&#58; index');
    

    Por esto otro
     Flash&#58;&#58;error('Usuario/Clave incorrectos');
     return $this-&gt;redirect('backend\index\index');
    

    Se soluciona el problema, ante esto creo que un route to ejecuta el nuevo controllador que le pasas, pero cuando termina con este sigue ejecutando el anterior, al contrario redirect no lo hace y por eso funciona bien.

    Por favor algun entendido si me puede corregir

    Saludos
  • o que sucede es q el route_to ejecuta una accion internamente en el framework, osea el browser no se entera de este cambio de hecho si te das cuenta la URL no cambia... Pero me alegra que hayas solucionado...
  • edited 7:39
    Pero todavia no me queda claro el motivo del problema, entiendo que el route tu llama a otra accion sin cambiar la url y el redirect si la cambia.

    Pero por lo que he visto el redirect llama a otro controller el cual se ejecuta y finaliza.

    Pero el route_to me da la impresion que llama a otro controller este se ejecuta y cuando acaba sigue con su ejecucion normal.

    Si no encuentro otra explicacion

    Saludos
Sign In or Register to comment.