Consulta sobre route_to("...

edited octubre 2008 in Dudas/Problemas
Estoy probando agregar la validación de usuarios en la aplicación y
tengo un controlador "admin_controler.php" que cuando el usuario se loguea lo dirige a uno de los controladores ... este es la parte del código...

....
if($auth->authenticate()){
$usuario = $auth->get_identity();
Flash::success("Bienvenido {$usuario}");
$this->route_to("controller: parroquias");
} else {
Flash::error("Usuario/Password invalido");
$this->login = $login;
$this->route_to("action: index");
}

....

El problema que tengo es que tengo definido un template que usan todos los controladores , pero no se carga el menu ... que está incluido en el
template ...

Lo que veo es que cuando se logea el usuario y se hace el route... en la
url de la página queda :

http://localhost/belen/admin/valida/

y si manualmente le corrijo el url al que debería ser

http://localhost/belen/parroquias

Me carga el menú correctamente...

Alguna idea de lo que debería hacer...

Gracias

Comentarios

  • edited 10:01
    Agrego más información para ver si ayuda a explicar mejor mi problema , estoy desarrollando una aplicación con kumbia versión 0.5 RC 2 ...

    Tengo definido en view\layouts , un archivo de menu "menu.php" ..
    que utiliza un menú en javascript como el siguiente ...

    <script type="text/javascript" src="public/javascript/JSCookMenu/JSCookMenu.js"></script>


    <link rel="stylesheet" href="css/ThemeGray/theme.css" type="text/css">
    <script type="text/javascript" src="css/ThemeGray/theme.js"></script>

    <script type="text/javascript"><!--
    var myMenu =
    [
    [null, 'Inicio', '../../admin', null, 'Inicio del sistema'], // a menu item
    _cmSplit,
    [null, 'Seguridad', null, null, 'Gestión de usuarios', // a menu item
    [null, 'Niveles', '../../belen/niveles', null, 'Niveles de Usuarios'], // a menu item
    [null, 'Usuarios', '../../belen/usuarios', null, 'Usuarios del sistema'], // a menu item
    [null, 'Acciones', '../../belen/acciones', null, 'Acciones del sistema'], // a menu item
    [null, 'Permisos', '../../belen/permisos', null, 'Permisos de usuarios'], // a menu item

    ....

    Luego tengo definida otra página llamda "principal.phtml" , donde cargo la cabecera , el pie de página , llamo a la página de menú ... y tengo el espacio del content() .... donde se cargan los controladores...

    .....
    <body>
    <p>&nbsp;</p>
    <table width="70%" border="0" align="center" >
    <tr>
    <td><img src="/belen/public/img/plantilla/cintillo.jpg" alt="3" width="900" height="52" /> <img src="/belen/public/img/plantilla/banner.png" alt="2" width="900" height="80" />
    </td>
    </tr>

    <tr style="background:url(img/plantilla/centro_.jpg)">
    <td height="415" align="left" valign="top"><table width="100%" height="100%" border="0">
    <tr>
    <td height="30" align="left" valign="top">
    <?require("menu.php");?>
    </td>
    </tr>

    .....

    está pagina "principal.phtml" ,es la que defino en cada controlador como template ... ejemplo :
    <?php

    class ParroquiasController extends StandardForm {

    public $scaffold = true;
    public $template = "principal";

    .....


    Ahora bien , cuando inicio la aplicación "http://localhost/belen"; carga el template perfectamente y va al controlador login ... ingreso el usuario y contraseña ... que hace un route hacia uno de los controladores , en este caso "parroquias" ...

    ....
    if($auth->authenticate()){

    $usuario = $auth->get_identity();

    Flash::success("Bienvenido {$usuario}");

    $this->route_to("controller: parroquias");

    .................

    Al hacer esto , si bien muestra los datos del controlador bien , NO carga el menú ...

    Probé hacer un "redirect" en lugar de un "route_to" y ahora me carga bien el menú , pero si ingreso en algunas de las opciones del standardForm como por ejemplo hacer un browse ... luego de hacer click en el botón "Volver" ... ya me deja de mostrar el menú ...

    .................
    if($auth->authenticate()){

    $usuario = $auth->get_identity();

    Flash::success("Bienvenido {$usuario}");

    //$this->route_to("controller: parroquias");
    $this->redirect("/parroquias");
    .................

    Quisiera saber si alguien tuve una situación similar que me pueda ayudar con este problema ...

    Saludos y Gracias...
  • edited 10:01
    No comprendo muy bien todo lo que quieres hacer en mi lectura rapida <!-- s;) --><img src="{SMILIES_PATH}/icon_wink.gif" alt=";)" title="Wink" /><!-- s;) -->

    Pero te puedo aclarar un poco como funcionan route_to y redirect.

    route_to: realiza un enrutamiento interno, es decir a ciencia cierta el navegador no se percata de que esta siendo enrutado, por ese motivo es que no afecta la barra de direcciones.

    redirect: realiza un redireccionamiento, esto es diferente a enrutar, ya que en este caso se reescribe la url y por lo tanto afecta la barra de direcciones, internamente kumbia reescribe el atributo location del objeto window con javascript (es decir window.location).

    Espero que te sirva de ayuda.
  • edited 10:01
    Haber... tal vez no me expresé bien ... resumiendo el problema es el siguiente, definimos un template para todas las paginas , que nosotros llamamos "principal.phtml" dentro de esté se cargar un menú hecho con javascript que se llama "menu.php" ( en el post anterior esto esta mas detallado con ejemplos de código ) .

    Luego cada controlador utiliza la sentencia

    public $template = "principal";

    El tema es el siguiente , cuando se ingresa por primera vez a la aplicación el menú aparece normalmente ... pero cuando se empieza a navegar por las distintas funciones como por ejemplo hacer un browse de usuarios y hacer click en volver ... el menú ya no aparece más ...

    Les adjunto 2 imagenes ... la primera con el menu ... luego se hace click en el botón "visualizar" ( browse ) y luego en "volver" y el menu desaparece ... y la cabecera y pie que están definidos en el template siguen saliendo correctamente ...

    Alguna idea que puede ser ???

    Alguien a utilizado menús desplegables en Kumbia , que me pueda dar algún ejemplo ?
    Saludos
  • edited 10:01
    el problema es el siguiente ... en el menu tenemos lo siguiente :

    <script type="text/javascript" src="public/javascript/JSCookMenu/JSCookMenu.js"></script>


    <link rel="stylesheet" href="css/ThemeGray/theme.css" type="text/css">
    <script type="text/javascript" src="css/ThemeGray/theme.js"></script>

    <script type="text/javascript"><!--
    var myMenu =
    [
    .....

    si le ponemos la ruta total ... funciona , por ejemplo


    <script type="text/javascript" src="http://LocalHost/Belen/public/javascript/JSCookMenu/JSCookMenu.js"></script>


    <link rel="stylesheet" href="http://LocalHost/Belen/public/css/ThemeGray/theme.css" type="text/css">
    <script type="text/javascript" src="http://LocalHost/Belen/public/css/ThemeGray/theme.js"></script>

    <script type="text/javascript"><!--
    var myMenu =
    [

    .....


    Hay alguna forma de utilizar alguna variable por ejemplo para que funcione tanto en desarrollo como en producción ?
  • Para los javascript
    <?php echo javascript_include_tag("JSCookMenu/JSCookMenu") ?>

    Para los estilos
    <?php echo stylesheet_link_tag("ThemeGray/theme") ?>
  • edited 10:01
    Perfecto ... funciona ...

    Pero me surje otro problema ...con el menu ... cómo hago para definir los links de cada una de las opciones ... porque si no las defino con la Ruta Total y empiezo a navegar , da error ...

    Ejemplo del menu con JavaScritp, el 2 parámetro es el link ,
    ...
    [null, 'Seguridad', null, null, 'Gestión de usuarios', // a menu item
    [null, 'Niveles', '[b]../../belen/niveles[/b]', null, 'Niveles de Usuarios'], // a menu item
    [null, 'Usuarios', '../../belen/usuarios', null, 'Usuarios del sistema'], // a menu item
    [null, 'Acciones', '../../belen/acciones', null, 'Acciones del sistema'], // a menu item
    [null, 'Permisos', '../../belen/permisos', null, 'Permisos de usuarios'], // a menu item
    ....

    Para que me funcione estoy poniendo en el Link la ruta total ... ejemplo
    "http://LocalHost/belen/niveles";

    Cómo se puede hacer para que sea relativo al servidor donde esté instalado es decir que se pueda usar en desarrollo y produccion ?

    Gracias....
  • Ok primero te explico algo para que tengas claro un concepto de Kumbia y la mayoría de los framework lo manejan así... veo que intentas darle la ruta directa a tu controlador y cuando digo esto es que intentas darle la ruta del archivo .php
    Esto en kumbia no existe ya que en realidad quien sabe donde esta tu controller es el Dispatcher y el Router y esto porque kumbia para efecto del usuario que ejecuta la aplicacion desde el browser nunca se entera que existe un directorio apps/default/ ya que en realidad todo se ejecuta en el public/

    que te digo con esto que kumbia no entiende esa ruta que le intentas enviar ../../belen/niveles intenta pasarle la ruta asi...

    [null, 'Niveles', [b]'belen/niveles'[/b], null, 'Niveles de Usuarios'], // a menu item

    y avisas si te funciona...
  • edited 10:01
    Hice los cambios en la definición del menú y no funciona...

    Estoy utilizando un menu javascript ( "JSCookMenu" ) ... cambié la definición del menu según lo sugerido a :

    ......
    <script type="text/javascript"><!--
    var myMenu =
    [
    [null, 'Inicio', 'belen/admin', null, 'Inicio del sistema'], // a menu item
    _cmSplit,
    [null, 'Seguridad', null, null, 'Gestión de usuarios', // a menu item
    [null, 'Niveles', 'belen/niveles', null, 'Niveles de Usuarios'], // a menu item
    [null, 'Usuarios', 'belen/usuarios', null, 'Usuarios del sistema'], // a menu item
    [null, 'Acciones', 'belen/acciones', null, 'Acciones del sistema'], // a menu item
    [null, 'Permisos', 'belen/permisos', null, 'Permisos de usuarios'], // a menu item
    ],
    _cmSplit,
    ......

    El tema es que cuando ingreso a la aplicación , con :

    "http://localhost/belen";

    Ingreso a la pantalla de login , donde ingreso usuario y contraseña ...

    luego ... acceso por ejemplo al menú niveles , y me da el siguiente error :

    Está tratando de acceder a un controlador que no existe. Kumbia puede codificarlo por usted:
    Deseo crear un controlador ApplicationController
    Deseo crear un controlador StandardForm de la tabla 'belen'
    Cancelar

    KumbiaException: No se encontró el Controlador "belen". Hubo un problema al cargar el controlador, probablemente el archivo no exista en el directorio de módulos ó exista algun error de sintaxis. (102)
    En el archivo C:\xampp\htdocs\belen\library\kumbia\dispatcher\dispatcher.php en la línea: 223<
    C:\xampp\htdocs\belen\library\kumbia\kumbia.php(362)
    C:\xampp\htdocs\belen\public\index.php(72)

    Información Adicional:
    Aplicación actual: default
    Entorno actual: development
    Ubicación actual: default/belen/niveles
    Modelos Cargados: Acciones, Categorias, Comunidades, Estados, Niveles, Parroquias, Permisos, Sectores, Usuarios
    Modulos Cargados: library/kumbia/logger/logger.php, library/mail/mail.php, library/libchart/libchart.php, library/kumbia/auth/auth.php
    Plugins Cargados:
    Datos de Session:

    .......

    y veo que en la URL del navegador me está poniendo :

    "http://localhost/belen/belen/niveles";
  • edited 10:01
    Un pequeño cambio y funciona , le agregué la "/" antes del nombre del proyecto y funciona OK ...

    [null, 'Seguridad', null, null, 'Gestión de usuarios', // a menu item
    [null, 'Niveles', [b]'/belen/niveles',[/b] null, 'Niveles de Usuarios'], // a menu item
    [null, 'Usuarios', [b]'/belen/usuarios'[/b], null, 'Usuarios del sistema'], // a menu item
    [null, 'Acciones', [b]'/belen/acciones'[/b], null, 'Acciones del sistema'], // a menu item
    [null, 'Permisos', '/belen/permisos', null, 'Permisos de usuarios'], // a menu item

    Gracias...
  • Genial!
Sign In or Register to comment.