Ver Mensaje Individual
  #1 (permalink)  
Antiguo 23/01/2011, 11:44
Avatar de SetheR
SetheR
 
Fecha de Ingreso: enero-2009
Mensajes: 265
Antigüedad: 15 años, 11 meses
Puntos: 44
Dudas de principiante Zend Framework

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_DbTableZend_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!