hola a todos. Estoy haciendo mi primer proyecto en Zf para aprender y ya me han surgido algunas dudas. He empezado por hacer un sencillo sistema de users.
La primera es sobre la creación de sesiones. Aqui parte de mi controller (funciona bien):
Código PHP:
class UserController extends Zend_Controller_Action
{
private $_table = 'user_data';
private $_identity = 'email';
private $_credential = 'password';
public function init(){
Zend_Debug::dump($_SESSION);
}
/*mas métodos*/
public function loginAction(){
$auth = Zend_Auth::getInstance();
//if already loggedin, redirect to user panel
if($auth->hasIdentity()){
$this->_redirect('user/');
}
//Get login form
$form = $this->getLoginForm();
if($this->_request->isPost()){
if($form->isValid($this->_request->getPost())){
//Get form values
$email = $form->getValue('email');
$password = md5($form->getValue('password'));
//Begin authorization
$authAdapter = new Zend_Auth_Adapter_DbTable( Zend_Registry::get('dbAdapter') );
$authAdapter->setTableName($this->_table)
->setIdentityColumn($this->_identity)
->setCredentialColumn($this->_credential);
$authAdapter->setIdentity($email)
->setCredential($password);
$result = $auth->authenticate($authAdapter);
if($result->isValid()){
/*
$user_session = new Zend_Session_Namespace('user');
$user = new Application_Model_User();
TODO
*/
}
else{
//Show the form again
$this->view->form = $form;
//Manage some auth errors
switch($result->getCode()){
case Zend_Auth_Result::FAILURE_IDENTITY_NOT_FOUND:
$this->view->login_error = "El email no existe";
break;
case Zend_Auth_Result::FAILURE_CREDENTIAL_INVALID:
$this->view->login_error = "Contrasena incorrecta";
break;
case Zend_Auth_Result::FAILURE:
$this->view->login_error = "Fallo en la autentificación. Revisa los datos";
break;
}
}
}
}else{
$this->view->form = $form;
}
}
private function getLoginForm(){
$form = new Form_Login();
$form->setAction('login/')
->setMethod('post');
return $form;
}
}
la duda me surge tras el
Código PHP:
if($result->isValid())
En verdad no se abordar bien el problema sin liarme en exceso. Lo que quiero hacer es persistir datos del usuario como el email, nombre e id mediante la sesión para no tener que hacer una query extra en cada request.
Como veis tengo una clase
Application_Model_User (extiende de
Zend_Db_Table_Abstract) que se encarga de hacer cambios en la fila correspondiente. ¿Como extraigo el id del user a partir de Zend_Auth? he visto tutoriales (MdW) en lo que se hace algo como
Código PHP:
$this->_idUsuario = Zend_Auth::getInstance()->getIdentity()->id_usuario;
La unica manera que se me ocurría, es pasarle a un método de mi modelo un objeto Zend_Session_namespace y editarlo desde allí, pero parece ser que recomiendan tratar las sessiones desde el controlador por temas de mantenimiento.
siguiente: Cuando seteo los actions de mis forms como en el código que puse arriba a veces cambia el url y a veces no. me explico:
estoy en
http://localhost/zendp/user/login
envio el formulario que me sale para iniciar sesión.
cuando lo hago, a veces el url cambia a
http://localhost/zendp/user/login/login, pero otras veces, se queda como estaba (que es lo que yo quiero). Es seguro un fallo mío al programar el formulario, pero no doy con la tecla y lo he intentado de varias maneras.
Gracias anticipadas!