Foros del Web » Programando para Internet » PHP » Zend »

Dudas de principiante Zend Framework

Estas en el tema de Dudas de principiante Zend Framework en el foro de Zend en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 23/01/2011, 11:44
Avatar de SetheR  
Fecha de Ingreso: enero-2009
Mensajes: 265
Antigüedad: 15 años, 3 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!
  #2 (permalink)  
Antiguo 23/01/2011, 12:00
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Dudas de principiante Zend Framework

Para persistir los datos tenes write, podes guardar todos los datos o algunos, despues recuperas la identidad con:

Código PHP:
Ver original
  1. $identity = Zend_Auth::getInstance()->getIdentity();

Y con respecto al form tenes que poner la barra "/" al inicio

Código PHP:
Ver original
  1. private function _getLoginForm()
  2. {
  3.    $form = new Form_Login();
  4.    $form->setAction('/login')
  5.         ->setMethod('post');          
  6.    return $form;
  7. }

por convención tanto los metodos private y protected al igual que las propiedades empiezan con underscore.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 23/01/2011, 12:09
Avatar de SetheR  
Fecha de Ingreso: enero-2009
Mensajes: 265
Antigüedad: 15 años, 3 meses
Puntos: 44
Respuesta: Dudas de principiante Zend Framework

Muchas gracias por la rapida respuesta (aun ni habia salido del foro )

Respecto a lo de la session, lo que yo buscaba es exactamente esto:
Código PHP:
$authAdapter->getResultRowObject(); 
Que me devuelve el row por el que preguntó el objeto Auth.

karma para ti. No sabía que lo de _metodo era una convención. Hay algún sitio donde pueda hecharle un vistazo a estas normas?

Saludos
  #4 (permalink)  
Antiguo 23/01/2011, 12:15
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Dudas de principiante Zend Framework

Zend Coding Standard
__________________
http://es.phptherightway.com/
thats us riders :)
  #5 (permalink)  
Antiguo 30/05/2016, 06:18
 
Fecha de Ingreso: abril-2008
Mensajes: 33
Antigüedad: 16 años
Puntos: 0
Respuesta: Dudas de principiante Zend Framework

¿Como persistir los datos del Login para Zend 1?

Etiquetas: auth, session, formulario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:58.