Duda newbie

23 views
Skip to first unread message

iperich

unread,
Feb 3, 2008, 7:45:44 PM2/3/08
to CakePHP Chile
Bueno, como les conté acabo de meterme en CakePHP, y más aún, acabo de
bajar el 1.2 que presenta bastantes diferencias, noté que el html
helper está "deprecated" en sus funciones relativas a los forms y que
ahora hay un "form helper" (supongo que se llamará así), entre otras
diferencias. El "bake" también está mucho más completo y sin los bugs
que tenía la versión anterior, que en mi caso no me mostraba los
campos de las BD y había que parchar el código para que funcionara. Me
agradó bastante más.

Bueno, mi duda, que sé que es una lesera, pero necesito avanzar rápido
y por eso acudo a uds, es la siguiente:

Tengo la página de "Bienvenido - loguéate - regístrate" en el archivo
home.ctp. Tengo la base de datos armadita, users, salas, post y
mensajes, modelos, controladores, vistas y todo anda bien, funciona
todo impeque pero hay algo que aun no cacho: ¿como le paso variables a
home.ctp? me explico: quiero que al estar logueado la weá no me pida
login y pass de nuevo, pero como no tengo un controller para esta
pagina home.ctp, no cacho como pasarle las variables de sesión, etc...
de hecho, tengo un controlador "home" pero que es para la página
home.thtml que es la que controla el "home" de cada user (su sala) no
la pagina principal...

Como se hace?

Ah?

Saludos

------------------------------
Ivo Perich


"Unas pocas horas de prueba y error pueden ahorrarte minutos de leer
manuales"

Dani

unread,
Feb 3, 2008, 9:40:01 PM2/3/08
to CakePHP Chile
> Tengo la página de "Bienvenido - loguéate - regístrate" en el archivo
> home.ctp. Tengo la base de datos armadita, users, salas, post y
> mensajes, modelos, controladores, vistas y todo anda bien, funciona
> todo impeque pero hay algo que aun no cacho: ¿como le paso variables a
> home.ctp?

En el método en la clase controller (action) tienes que setear las
variables que quieres pasar a la vista por ejemplo:
$this->set("variable", $variable);

me explico: quiero que al estar logueado la weá no me pida
> login y pass de nuevo, pero como no tengo un controller para esta
> pagina home.ctp, no cacho como pasarle las variables de sesión, etc...
> de hecho, tengo un controlador "home" pero que es para la página
> home.thtml que es la que controla el "home" de cada user (su sala) no
> la pagina principal...

Tienes que crear un controlador para la pagina home.
Luego te recomiendo crear un componente de autentificacion que chequee
la sesion o la ccokie en su defecto algo asi

if($this->Session->read("User.remember_me_on_this_computer"))
{
$auth = true;
}
else if($this->Cookie->read("User.remember_me_on_this_computer"))
{
$auth = true;
$this->Session->write("User.remember_me_on_this_computer", true);
}
else
$this->logout();

Algo así, fue lo primero que se me vino a la mente, pero por ahí va la
cosa.

iperich

unread,
Feb 3, 2008, 9:49:29 PM2/3/08
to CakePHP Chile
A ver, según entiendo los controllers se crean para los models, y no
tengo ningun modelo ni controller asociado a la página "home.ctp",
dado que esta página no es una vista... Como lo entiendo yo: la página
"register" es /users/register, por lo que usa los controlers del
modelo "user". El formulario de login envía la info a /users/home y
ocupa igualmente el controller users, la funcion home. Pero /home.ctp
no va asociado a ningún modelo, entonces el problema es que no sé
crear un controller que no va asociado a ningun modelo... hay algo que
no cacho conecptualmente ahí...

Gracias y Saludos...!

Claudio Medel

unread,
Feb 4, 2008, 5:07:24 AM2/4/08
to cakeph...@googlegroups.com
Para el asunto de login revisa este tutorial que es mas menos la idea que comenta Daniel, es para la versión 1.1 pero lo único que debes modificar para que quede operativo en 1.2 es el formulario de login:

 http://manual.cakephp.org/appendix/simple_user_auth


Por lo del "home.ctp" tienes la alternativa de crear un controlador sin modelo asociado, y si te da mucha lata eso una idea(no muy elegante) podria ser dentro de este mismo archivo "home.ctp" redireccionar a tú verdadera pagina de inicio.


Saludos,
Claudio

El día 3/02/08, iperich <ipe...@gmail.com> escribió:

Dani

unread,
Feb 4, 2008, 7:17:32 AM2/4/08
to CakePHP Chile
Crear un controlador que no tenga modelos asociados, en mi opinión, no
tiene nada de poco elegante, de hecho lo más probable es que los
controladores usen varios modelos y no solo uno.

On 4 feb, 07:07, "Claudio Medel" <cme...@gmail.com> wrote:
> Para el asunto de login revisa este tutorial que es mas menos la idea que
> comenta Daniel, es para la versión 1.1 pero lo único que debes modificar
> para que quede operativo en 1.2 es el formulario de login:
>
> http://manual.cakephp.org/appendix/simple_user_auth
>
> Por lo del "home.ctp" tienes la alternativa de crear un controlador sin
> modelo asociado, y si te da mucha lata eso una idea(no muy elegante) podria
> ser dentro de este mismo archivo "home.ctp" redireccionar a tú verdadera
> pagina de inicio.
>
> Saludos,
> Claudio
>
> El día 3/02/08, iperich <iper...@gmail.com> escribió:

Claudio Medel

unread,
Feb 4, 2008, 9:10:19 AM2/4/08
to cakeph...@googlegroups.com
Claro,  si esa yo ceo que es la manera adecuada, la que es poco elegante es redireccionar  desde "home.ctp" :P

El día 4/02/08, Dani <buen...@gmail.com> escribió:

iperich

unread,
Feb 4, 2008, 1:27:31 PM2/4/08
to CakePHP Chile
Gracias por sus respuestas, muchachos... bueno, aunque medité en algun
momento lo de hacer el redireccionamiento, por otro lado pensé que ya
que estoy aprendiendo CakePHP, por qué no tratar de aprender a hacerlo
"elegantemente", jejeje.... por lo que mi opción por ahora será
asociar el controlador a la página
Bueno, el rollo es que no sé cómo asociar el controller (tenga modelos
o no) a la página home.ctp... como se hace?
(de hecho, para mí lo mejor sería asociar el controller user a la
página home.ctp...)

Saludos!

On 4 feb, 11:10, "Claudio Medel" <cme...@gmail.com> wrote:
> Claro, si esa yo ceo que es la manera adecuada, la que es poco elegante es
> redireccionar desde "home.ctp" :P
>
> El día 4/02/08, Dani <buenao...@gmail.com> escribió:

Pablo Viojo

unread,
Feb 4, 2008, 3:35:07 PM2/4/08
to cakeph...@googlegroups.com


2008/2/4 iperich <ipe...@gmail.com>:


Gracias por sus respuestas, muchachos... bueno, aunque medité en algun
momento lo de hacer el redireccionamiento, por otro lado pensé que ya
que estoy aprendiendo CakePHP, por qué no tratar de aprender a hacerlo
"elegantemente", jejeje.... por lo que mi opción por ahora será
asociar el controlador a la página
Bueno, el rollo es que no sé cómo asociar el controller (tenga modelos
o no) a la página home.ctp... como se hace?
(de hecho, para mí lo mejor sería asociar el controller user a la
página home.ctp...)

Saludos!

Ivo:

Por algún motivo un mensaje que envie antes nunca llegó, pero bue...
Lo que yo te propondría, ya que estan en la idea de hacerlo bien, es irte por el lado de los elementos reutilizables. Míra este articulo[1]. De ese modo puedes dejar la pagina home tal cual está, sin tener que agregar controller, ni modelo, ni nada, y poner la lógica relacinada con Usuario en su controller/model según corresponda.

Saludos,


Pablo Viojo
pvi...@gmail.com
http://pviojo.net


[1] http://bakery.cakephp.org/articles/view/creating-reusable-elements-with-requestaction

iperich

unread,
Feb 4, 2008, 8:21:43 PM2/4/08
to CakePHP Chile
Vale, le echaré una lukeada...
Gracias!!

On 4 feb, 17:35, "Pablo Viojo" <pvi...@gmail.com> wrote:
> 2008/2/4 iperich <iper...@gmail.com>:
> [1]http://bakery.cakephp.org/articles/view/creating-reusable-elements-wi...

iperich

unread,
Feb 5, 2008, 1:11:57 AM2/5/08
to CakePHP Chile
Bueno, hay que celebrar... el grupo CakePHP Chile acaba de resolver su
primer problema.

**** APLAUSOS ****

Bueno, lo que hice fue lo que dijo Pablo, usé el requestAction de la
siguiente forma:
Me hice en el controller "user" una funcion "isLogged" que lo unico
que hace es verificar la sesión, y si hay sesión activa, redirecciona
a /users/home.
Entonces en el home.ctp puse la siguiente línea:

$logged=$this->requestAction('/users/isLogged');

y listo!!

Entonces en el home.ctp, si entro teniendo sesión, me redirecciona
automático.

La raja el requestAction porque hace precisamente lo que necesitaba:
asociar cualquier controller a cualquier página.

Creo que lo voy a usar bastante, es muy útil.

Gracias

Saludos!

iperich.

On 4 feb, 17:35, "Pablo Viojo" <pvi...@gmail.com> wrote:
> 2008/2/4 iperich <iper...@gmail.com>:
>
>
>
> > Gracias por sus respuestas, muchachos... bueno, aunque medité en algun
> > momento lo de hacer el redireccionamiento, por otro lado pensé que ya
> > que estoy aprendiendo CakePHP, por qué no tratar de aprender a hacerlo
> > "elegantemente", jejeje.... por lo que mi opción por ahora será
> > asociar el controlador a la página
> > Bueno, el rollo es que no sé cómo asociar el controller (tenga modelos
> > o no) a la página home.ctp... como se hace?
> > (de hecho, para mí lo mejor sería asociar el controller user a la
> > página home.ctp...)
>
> > Saludos!
>
> Ivo:
>
> Por algún motivo un mensaje que envie antes nunca llegó, pero bue...
> Lo que yo te propondría, ya que estan en la idea de hacerlo bien, es irte
> por el lado de los elementos reutilizables. Míra este articulo[1]. De ese
> modo puedes dejar la pagina home tal cual está, sin tener que agregar
> controller, ni modelo, ni nada, y poner la lógica relacinada con Usuario en
> su controller/model según corresponda.
>
> Saludos,
>
> Pablo Viojo

Pablo Viojo

unread,
Feb 5, 2008, 8:46:44 AM2/5/08
to cakeph...@googlegroups.com


2008/2/5 iperich <ipe...@gmail.com>:




Bueno, lo que hice fue lo que dijo Pablo, usé el requestAction de la
siguiente forma:
Me hice en el controller "user" una funcion "isLogged" que lo unico
que hace es verificar la sesión, y si hay sesión activa, redirecciona
a /users/home.
Entonces en el home.ctp puse la siguiente línea:

$logged=$this->requestAction('/users/isLogged');

y listo!!

Entonces en el home.ctp, si entro teniendo sesión, me redirecciona
automático.

La raja el requestAction porque hace precisamente lo que necesitaba:
asociar cualquier controller a cualquier página.

Creo que lo voy a usar bastante, es muy útil.

Gracias

Saludos!

iperich.

Volviendo a leer la solución y el resto del hilo creo que si bien sirve lo que hiciste no es del todo óptimo, ya que en cuando un usuario logueado va a home (o sea la de  la página home.ctp) se hace todo el proceso de carga de esa url (Router, Dispatcher, PagesController, vista) y despues de hacer todo eso se vuelve a hacer un requestAction (que otra vez hace Router, Dispatcher, UsersController, User, etc) para luego un redirect. O sea es una carga bastante grande.

Por alguna razón habia entendido mal y pensé que lo que querías era mostrar el formulario de login si no estaba logueado y si ya lo estaba alguna otra cosa (o nada)

Creo que una mejor opción para lo que tu quieres es usar el beforeFilter, ya sea a nivel del PagesController (optimo), o del AppController y ahi decidir a cual home ir (en función de si el usuario ya está logueado o no)

Saludos,


--

iperich

unread,
Feb 5, 2008, 10:31:45 AM2/5/08
to CakePHP Chile

> Por alguna razón habia entendido mal y pensé que lo que querías era mostrar
> el formulario de login si no estaba logueado y si ya lo estaba alguna otra
> cosa (o nada)
>

Entendiste bien, eso era lo que quería... que si no estaba logueado el
user, me hiciera un redirect...

Reply all
Reply to author
Forward
0 new messages