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

no puedo dar de alta

Estas en el tema de no puedo dar de alta en el foro de Zend en Foros del Web. Buenas a todos, quiero intentar dar de alta y me sale el siguiente error: Catchable fatal error: Argument 1 passed to Qclientes_Model_QclientesMapper::save() must be an ...
  #1 (permalink)  
Antiguo 27/10/2011, 08:58
 
Fecha de Ingreso: diciembre-2008
Mensajes: 805
Antigüedad: 15 años, 11 meses
Puntos: 20
no puedo dar de alta

Buenas a todos, quiero intentar dar de alta y me sale el siguiente error:

Catchable fatal error: Argument 1 passed to Qclientes_Model_QclientesMapper::save() must be an instance of Qclientes_Model_DbTable_Clientes, instance of Qclientes_Model_Clientes given, called in /var/www/qaz/application/modules/Qclientes/controllers/QclientesController.php on line 33 and defined in /var/www/qaz/application/modules/Qclientes/models/QclientesMapper.php on line 36

en esta parte del codigo :
Zend_Debug::dump($mapper);
$mapper->save($ape); // llama la funcion save para guardar los datos del array

y el debud me devuelve esto:
object(Qclientes_Model_QclientesMapper)#118 (1) {
["_dbTable":protected] => NULL
}
  #2 (permalink)  
Antiguo 27/10/2011, 09:24
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: no puedo dar de alta

Creo que el error es bastante claro, le estas pasando a save una instancia de Qclientes_Model_Clientes cuando deberia ser una de Qclientes_Model_DbTable_Clientes, esto según tu código, en realidad deberia ser al reves, el mapper deberia recivir el model.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 27/10/2011, 10:05
 
Fecha de Ingreso: diciembre-2008
Mensajes: 805
Antigüedad: 15 años, 11 meses
Puntos: 20
Respuesta: no puedo dar de alta

Bien, ahora me da otro error, que no entiedo.

Pero.. yo saque el ejemplo de Zend Framework Quickstart:

http://framework.zend.com/manual/en/...eate-form.html

y sale asi. muchas gracias por la ayuda
  #4 (permalink)  
Antiguo 27/10/2011, 10:14
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: no puedo dar de alta

Que error te da ?, y si miras el ejemplo veras que el mapper recibe una instancia del modelo no del dbtable.
__________________
http://es.phptherightway.com/
thats us riders :)
  #5 (permalink)  
Antiguo 27/10/2011, 10:24
 
Fecha de Ingreso: diciembre-2008
Mensajes: 805
Antigüedad: 15 años, 11 meses
Puntos: 20
Respuesta: no puedo dar de alta

yo tengo esto:


Qclientes_QclientesController
Código PHP:
public function signAction()
    {


        
//echo $this->getRequest()->isPost() ."<br>"; // si el request fue hecho por el método POST

        
$request $this->getRequest();
                        
$form = new Qclientes_Form_Clientes(); //      Application_Form_Clientes();
                        
                        
if ($this->getRequest()->isPost()) {
                            if (
$form->isValid($request->getPost())) {
                                
$ape = new Qclientes_Model_Clientes($form->getValues()); // trae los datos del formulario, sin el idclientes
                                
                                
$mapper = new Qclientes_Model_QclientesMapper();
                                
//Zend_Debug::dump($mapper);
                                
$mapper->save($ape); // llama la funcion save para guardar los datos del array
                                 
                                
return $this->_helper->redirector('consulta'); //redirecciona a la consulta
                            
}
                        }

                        
$this->view->form $form;
    } 
Qclientes_Model_QclientesMapper

Código PHP:

 
public function save(Qclientes_Model_DbTable_Clientes $clientes) {

       
$this->view->bienvenido "holaControler";

        
$data = array(
            
//'idclientes'=>$idclientes->idclientes(),
            
'apellido' => $clientes->getapellido(),
            
'nombre' => $clientes->getnombre(),
            
'direccion' => $clientes->getdireccion());
         
Zend_Debug::dump($data);

        if (
null === ($id $clientes->getidclientes())) {
            unset(
$data['id']);


            
$this->getDbTable()->insert($data);
        } else {
            
$this->getdbTable()->update($data, array('idclientes = ?' => $id));
        }
             
    } 
pero, me cuesta darme cuenta cual es el error
  #6 (permalink)  
Antiguo 27/10/2011, 10:39
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: no puedo dar de alta

Ya te lo dijo Masterpuppet, tu función save, espera una variable del tipo Qclientes_Model_DbTable_Clientes, y tu le estas pasando una variable del tipo Qclientes_Model_Clientes por eso te da error.
  #7 (permalink)  
Antiguo 27/10/2011, 10:49
 
Fecha de Ingreso: diciembre-2008
Mensajes: 805
Antigüedad: 15 años, 11 meses
Puntos: 20
Respuesta: no puedo dar de alta

o sea que tengo que cambiar eso:

$mapper = new Qclientes_Model_QclientesMapper();

por esto:

$mapper = new Qclientes_Model_DbTable_Clientes();

pero me da este otro error:

Fatal error: Call to undefined method Qclientes_Model_DbTable_Clientes::save()

muchas gracias por la ayuda.
  #8 (permalink)  
Antiguo 27/10/2011, 11:22
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: no puedo dar de alta

No, tienes que simplemente, cambiar el tipo de variable que recibe tu función:

Código PHP:
Ver original
  1. public function save(Qclientes_Model_DbTable_Clientes $clientes) {

Saludos.
  #9 (permalink)  
Antiguo 27/10/2011, 12:08
 
Fecha de Ingreso: diciembre-2008
Mensajes: 805
Antigüedad: 15 años, 11 meses
Puntos: 20
Respuesta: no puedo dar de alta

muchas gRacias por la ayuda, ese error desaparecio pero no me carga el registro. ahora voy a investigar por que . mucha gracias nuevamente!!1
  #10 (permalink)  
Antiguo 28/10/2011, 06:39
 
Fecha de Ingreso: diciembre-2008
Mensajes: 805
Antigüedad: 15 años, 11 meses
Puntos: 20
Respuesta: no puedo dar de alta

Despues de varios intentos, sigo sin poder cargar datos en mi db, vuelvo a pedir ayuda, el problema es que no me larga ningun error.
muchas gracias desde ya
  #11 (permalink)  
Antiguo 28/10/2011, 07:40
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: no puedo dar de alta

Que tal sergiop21,

Primero, has solucionado el problema del mapper ?, porque debe recibir una instancia del model y no del dbtable, la firma debería ser:

mapper
Código PHP:
Ver original
  1. public function save(Qclientes_Model_Clientes $clientes)
  2. {...}

Segundo comprueba $data, tiene todos los valores que necesita ?

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #12 (permalink)  
Antiguo 28/10/2011, 07:54
 
Fecha de Ingreso: diciembre-2008
Mensajes: 805
Antigüedad: 15 años, 11 meses
Puntos: 20
Respuesta: no puedo dar de alta

Buenas!!! si ya lo solucione a eso y $data si me trae, me parece que el problema esta en que no auto- incrementa. el motor de bd es postgres. como puedo hacer?? por que todo los datos que me trae estan bien. ahh y otra cosa. me podrias explicar que hace esto: que lo entiendo a medias:

Código PHP:
   if (null === ($id $clientes->getidclientes())) {  // pregunta si el id es null, en el caso de que si.

                        
unset($data['id']);  destruye el id
            $this
->getDbTable()->insert($data); // y aca supuestamente lo da de alta 
  #13 (permalink)  
Antiguo 28/10/2011, 10:06
 
Fecha de Ingreso: diciembre-2008
Mensajes: 805
Antigüedad: 15 años, 11 meses
Puntos: 20
Respuesta: no puedo dar de alta

El error me lo da aca :

Código PHP:
$this->getDbTable()->insert($data); 
hice un Zend_Debug::dump( $this->_dbTable) - en getDbTable() - y me devuelve esto

Código:
object(Qclientes_Model_DbTable_Clientes)#113 (18) {
  ["_name":protected] => string(8) "clientes"
  ["_definition":protected] => NULL
  ["_definitionConfigName":protected] => NULL
  ["_db":protected] => object(Zend_Db_Adapter_Pdo_Pgsql)#35 (12) {
    ["_pdoType":protected] => string(5) "pgsql"
    ["_numericDataTypes":protected] => array(12) {
      [0] => int(0)
      [1] => int(1)
      [2] => int(2)
      ["INTEGER"] => int(0)
      ["SERIAL"] => int(0)
      ["SMALLINT"] => int(0)
      ["BIGINT"] => int(1)
      ["BIGSERIAL"] => int(1)
      ["DECIMAL"] => int(2)
      ["DOUBLE PRECISION"] => int(2)
      ["NUMERIC"] => int(2)
      ["REAL"] => int(2)
    }
    ["_defaultStmtClass":protected] => string(21) "Zend_Db_Statement_Pdo"
    ["_config":protected] => array(8) {
      ["host"] => string(9) "localhost"
      ["username"] => string(8) "postgres"
      ["password"] => string(8) "postgres"
      ["dbname"] => string(3) "qaz"
      ["charset"] => NULL
      ["persistent"] => bool(false)
      ["options"] => array(2) {
        ["caseFolding"] => int(0)
        ["autoQuoteIdentifiers"] => bool(true)
      }
      ["driver_options"] => array(0) {
      }
  #14 (permalink)  
Antiguo 29/10/2011, 07:10
 
Fecha de Ingreso: diciembre-2008
Mensajes: 805
Antigüedad: 15 años, 11 meses
Puntos: 20
Respuesta: no puedo dar de alta

despues de tanto tocar y revisar!!! me di cuenta que habian unos campos cambiados con respecto, entre la bd y el codigo. Muchas gracias a todos los que me ayudaron!!!!1

Etiquetas: php, altas
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 07:05.