Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Auth ControLler ZF

Estas en el tema de Auth ControLler ZF en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola, estoy empezando con etso del Zend Framework, y me he topado con un problema al tratar de generar la autentificacion de usuarios. He buscado ...
  #1 (permalink)  
Antiguo 11/12/2008, 15:26
 
Fecha de Ingreso: julio-2008
Ubicación: México
Mensajes: 150
Antigüedad: 15 años, 9 meses
Puntos: 4
Auth ControLler ZF

Hola, estoy empezando con etso del Zend Framework, y me he topado con un problema al tratar de generar la autentificacion de usuarios. He buscado ya varios tutoriales, he leido la documentacion oficial, y buscado en este foro y no logro encontrar una solución.

De antemano gracias.



Me da el siguiente error:

Catchable fatal error: Argument 1 passed to Zend_Auth_Adapter_DbTable::__construct() must be an instance of Zend_Db_Adapter_Abstract, instance of Zend_Config_Ini given, called in C:\wamp\www\myfirstzend\application\controllers\Au thController.php on line 34 and defined in C:\wamp\www\myfirstzend\library\Zend\Auth\Adapter\ DbTable.php on line 112


Mi Bootstrap es este:

Código PHP:
error_reporting(E_ALL E_STRICT);
date_default_timezone_set('Chile/Continental');
set_include_path('.' PATH_SEPARATOR './library' PATH_SEPARATOR .'./application/models/' PATH_SEPARATOR get_include_path());

include 
"Zend/Loader.php";

Zend_Loader::loadClass('Zend_Controller_Front');
Zend_Loader::loadClass('Zend_Config_Ini');
Zend_Loader::loadClass('Zend_Registry');
Zend_Loader::loadClass('Zend_Db');
Zend_Loader::loadClass('Zend_Db_Table');
Zend_Loader::loadClass('Zend_Debug');
Zend_Loader::loadClass('Zend_Auth');
//// load configuration
$config = new Zend_Config_Ini('./application/config.ini''general');
$registry Zend_Registry::getInstance();
$registry->set('config'$config);

// setup database
$db Zend_Db::factory($config->db->adapter,$config->db->config->toArray());
Zend_Db_Table::setDefaultAdapter($db);

// setup controller
$front Zend_Controller_Front::getInstance();
$front->throwExceptions(true);
//Usar controlador por defecto si url erronea
//$frontController->setParam('useDefaultControllerAlways', true);

$front->setControllerDirectory('./application/controllers');
// run!
//No es la unica manera de manejar errores
//try {
    
$front->dispatch();
//} catch (Exception $e) {
  //  require_once("404.php");
//} 
Mi archivo de configuracion .ini es este:
Código:
[general]
db.adapter = PDO_MYSQL
db.config.host = localhost
db.config.username = root
db.config.password = 
db.config.dbname = pixelsistema

El AuthController es este:

Código PHP:
class AuthController extends Zend_Controller_Action
{
    function 
init()
    {
        
$this->initView();
        
$this->view->baseUrl $this->_request->getBaseUrl();
    }
    
    function 
indexAction()
    {
        
$this->_redirect('/');
    }
    
    function 
loginAction()
    {
        
$this->view->message '';
        if (
$this->_request->isPost()) 
        {
            
// collect the data from the user
            
Zend_Loader::loadClass('Zend_Filter_StripTags');
            
$f = new Zend_Filter_StripTags();
            
$username $f->filter($this->_request->getPost('user'));
            
$password $f->filter($this->_request->getPost('pass'));
            
            if (empty(
$username)) 
                
$this->view->message 'Please provide a username.';
                
            else 
            {
                
// setup Zend_Auth adapter for a database table
                
Zend_Loader::loadClass('Zend_Auth_Adapter_DbTable');
                
$dbAdapter Zend_Registry::get('config');
                
                
/*
                Aqui he probado con lo siguiente: 
                $dbAdapter->db->cinfig->dbname
                $dbAdapter->db->adapter
                
                Todo sin éxito y con el mismo error
                */
                
$authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);

                
                
                
                
$authAdapter->setTableName('usuario');
                
$authAdapter->setIdentityColumn('user');
                
$authAdapter->setCredentialColumn('pass');
                
// Set the input credential values to authenticate against
                
$authAdapter->setIdentity($username);
                
$authAdapter->setCredential($password);
                
// do the authentication
                
$auth Zend_Auth::getInstance();
                
$result $auth->authenticate($authAdapter);
                if (
$result->isValid())
                {
                    
// success: store database row to auth's storage
                    // system. (Not the password though!)
                    
$data $authAdapter->getResultRowObject(null,'pass');
                    
$auth->getStorage()->write($data);
                    
$this->_redirect('/');
                } 
                else 
                {
                    
// failure: clear database row from session
                    
$this->view->message 'Login failed.';
                }
            }
        }        
        
$this->view->title "Log in";
        
$this->render();
    }    
    
    
    function 
logoutAction()
    {
        
Zend_Auth::getInstance()->clearIdentity();
        
$this->_redirect('/');
    }    

  #2 (permalink)  
Antiguo 11/12/2008, 16:20
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Auth ControLler ZF

Tu problema es más basico de lo que crees, y si ves el error (y lo entiendes) verás porque, veamos que te dice:
Cita:
Catchable fatal error: Argument 1 passed to Zend_Auth_Adapter_DbTable::__construct() must be an instance of Zend_Db_Adapter_Abstract, instance of Zend_Config_Ini given, called in C:\wamp\www\myfirstzend\application\controllers\Au thController.php on line 34 and defined in C:\wamp\www\myfirstzend\library\Zend\Auth\Adapter\ DbTable.php on line 112
Estas pasando al adapter una instancia de Zend_Config, cuando el adapter necesita una instancia de Zend_Db.

Necesitas guardar en tu registry la instancia de Db usando algo asi:
Código php:
Ver original
  1. $db = Zend_Db::factory($config->db->adapter,$config->db->config->toArray());
  2. Zend_Db_Table::setDefaultAdapter($db);
  3.  
  4. Zend_Registry::set('db', $db);

Luego en tu controller, en lugar de rescatar $config, rescatas $db.

Saludos
  #3 (permalink)  
Antiguo 11/12/2008, 16:47
 
Fecha de Ingreso: julio-2008
Ubicación: México
Mensajes: 150
Antigüedad: 15 años, 9 meses
Puntos: 4
Respuesta: Auth ControLler ZF

Pues muchísimas gracias, efectivamente ahí estaba el problema.
Estas son de las cosas que de pronto dan coraje pero que hace que uno aprenda.

Gracias de nuevo GatorV
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 05:44.