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

Zend Framework

Estas en el tema de Zend Framework en el foro de Zend en Foros del Web. Buenos días ps soy nuevo en este foro, asi que espero que alguien pueda ayudarme en este tema, actualmente estoy trabajando con zend framework pero ...
  #1 (permalink)  
Antiguo 28/02/2012, 11:18
 
Fecha de Ingreso: febrero-2012
Mensajes: 14
Antigüedad: 12 años, 9 meses
Puntos: 1
Pregunta Zend Framework

Buenos días

ps soy nuevo en este foro, asi que espero que alguien pueda ayudarme en este tema, actualmente estoy trabajando con zend framework pero me ha surgido un inconveniente que realmente no he podido dar solución y es como configurar el application.ini y el bootstrap para poder realizar dos conexiones a base de datos, actualmente ya tengo configurado el application.ini pero no he podido conectarme a las dos bases si no solo a uno, me gustaria si alguien pudiera colaborarme con este tema...le que quedare agradecido
  #2 (permalink)  
Antiguo 28/02/2012, 11:53
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Zend Framework

Que tal david1019,

Primero bienvenido a FdW, segundo, configuraste el resource como en la doc http://framework.zend.com/manual/en/...ources.multidb y no te funciona ?, postea lo que tienes echo y el error que te este dando.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 28/02/2012, 13:10
 
Fecha de Ingreso: febrero-2012
Mensajes: 14
Antigüedad: 12 años, 9 meses
Puntos: 1
Respuesta: Zend Framework

Hola masterpuppet

ps la verdad si he leído varios foros pero aun no me funciona la configuración que tengo es la siguiente:

application.ini:

[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0



resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"

resources.view[] = ""
resources.modules[] = ""


resources.multidb.db1.adapter = "pdo_msql"
resources.multidb.db1.host = "host"
resources.multidb.db1.username = "username"
resources.multidb.db1.password = "password"
resources.multidb.db1.dbname = "tabla"

resources.multidb.db2.adapter = "pdo_mysql"
resources.multidb.db2.host = "host"
resources.multidb.db2.username = "username"
resources.multidb.db2.password = "password"
resources.multidb.db2.dbname = "tabla"


;resources.multidb.db1.isDefaultTableAdapter = true

resources.multidb.db1.isDefaultTableAdapter = true

resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
[staging : production]

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1

El bootstrap:

protected function _initMyDb() {

$this->bootstrap('multidb');
$resource = $this->getPluginResource('multidb');
$resource->init();

$db1 = $resource->getDb('db1');
$db2 = $resource->getDb('db2');
$defaultDb = $resource->getDb();

Zend_Registry::set('db2', $db2);
Zend_Registry::set('db1', $db1);

}


pero me sale dos tipos de errores el primero es:

Uncaught Ext.Error: Unable to parse the JSON returned by the server: You're trying to decode an invalid JSON String: <br />
<b>Fatal error</b>: Class 'Paramadmin_Model_Rules' not found in <b>C:\AppServ\www\humanintelligence\application\mo dules\paramadmin\controllers\IndexController.php</b> on line <b>21</b><br />

Lo cual tengo entendido que me sale ya que no puede realizar la segunda conexión y trata de convertirme en un objeto toda la cadena de texto

y el siguiente es cuando configuro el boostrap de otra manera como aparece en los doc.

Fatal error: Uncaught exception 'Zend_Application_Resource_Exception' with message 'A DB adapter was tried to retrieve, but was not configured' in C:\ZF\library\Zend\Application\Resource\Multidb.ph p:142 Stack trace: #0 C:\AppServ\www\humanintelligence\application\Boots trap.php(29): Zend_Application_Resource_Multidb->getDb('db1') #1 C:\ZF\library\Zend\Application\Bootstrap\Bootstrap Abstract.php(667): Bootstrap->_initMyDb() #2 C:\ZF\library\Zend\Application\Bootstrap\Bootstrap Abstract.php(620): Zend_Application_Bootstrap_BootstrapAbstract->_executeResource('mydb') #3 C:\ZF\library\Zend\Application\Bootstrap\Bootstrap Abstract.php(584): Zend_Application_Bootstrap_BootstrapAbstract->_bootstrap(NULL) #4 C:\ZF\library\Zend\Application.php(355): Zend_Application_Bootstrap_BootstrapAbstract->bootstrap(NULL) #5 C:\AppServ\www\humanintelligence\public\index.php( 25): Zend_Application->bootstrap() #6 {main} thrown in C:\ZF\library\Zend\Application\Resource\Multidb.ph p on line 142

la verdad agradezco cualquier colaboración...muchas gracias
  #4 (permalink)  
Antiguo 28/02/2012, 13:28
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Zend Framework

Con respecto al primer error, postea el código del controller y estas seguro que el json esta bien formado ?, estas seguro que la clase existe ?

Con respecto al segundo error, cuando sucede ? postea el codigo porque yo veo un mydb cuando debería ser db1 o db2

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #5 (permalink)  
Antiguo 28/02/2012, 13:49
 
Fecha de Ingreso: febrero-2012
Mensajes: 14
Antigüedad: 12 años, 9 meses
Puntos: 1
Respuesta: Zend Framework

yo estoy combinando Ext_js con zend_framework por lo cual el controller de zend me quedaría algo así.


<?php

class Paramadmin_IndexController extends Zend_Controller_Action
{

public function init()
{
/* Initialize action controller here */
}

public function indexAction()
{
// action body
}

public function getrulesAction()
{
$start = $this->getRequest()->getParam('start');
$limit = $this->getRequest()->getParam('limit');

$mRules = new Paramadmin_Model_Rules();

//$data = $mRules->getrules($start, $limit);

$msg = 1;
if(is_array($data)){
$success = true;
}else{
$msg = 'Error al consultar los datos';
$success = false;
// $data = array();

}

$response = array(
'success' => $success,
'msg' => $msg,
'data' => $data,
'total' => $data

);


$this->_helper->json->sendJson($response);

}



}

en ese controlador tengo una variable que es $mRules = new Paramadmin_Model_Rules(); la cual creeria yop que es la clase, el codigo dentro de esta es

<?php

class Paramadmin_Model_Rules extends Zend_Db_Adapter_Abstract
{
protected $_name = 'rule';
protected $_primary = 'idrule';

public function getrules($start = 0,$limit = 0){

$data = array();
$limit = ($limit != 0)?'LIMIT '.$start.', '.$limit:'';

$sql = sprintf("SELECT rulename, ruledesc FROM rule",$limit);

$db = $this->getDefaultAdapter();
$stmt = $db->query($sql);
$data = $stmt->fetchAll();

$sql = 'SELECT FOUND_ROWS()';
$stmt = $db->query($sql);
$total = $stmt->fetchColumn();


$result = array(
'data' => $data,
'total' => $total
);


return $data;
}
}



?>

no se si sea de ayuda pero aparte del normal MVC que crea zend yo cree una carpeta modules y ahí dentro esta el controlador y el modelo que son las clases anteriores.

Lo que me dices de Mydb si no estoy mal no es el protected function _initMyDb() del bootstrap que esta intentando conectarse a las bases de datos?...

el store si te sirve que hago en js es el siguiente.

Ext.define('Hi.paramadmin.store.SRule',{
extend: 'Ext.data.Store',
requires: ['Hi.paramadmin.model.MRule'],
model: 'Hi.paramadmin.model.MRule',
proxy: {
type: 'ajax',
method: 'POST',
url: 'paramadmin/Index/getrules',
reader: {
type: 'json',
totalProperty: 'total',
root: 'data'
}
}
});
  #6 (permalink)  
Antiguo 28/02/2012, 14:14
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Zend Framework

Esto esta mal:
class Paramadmin_Model_Rules extends Zend_Db_Adapter_Abstract

La idea es que extiendas en dado caso de Zend_Db_Table_Abstract, para que puedas usar $this->getDefaultAdapter() o $this->getAdapter() en dado caso.
  #7 (permalink)  
Antiguo 28/02/2012, 14:26
 
Fecha de Ingreso: febrero-2012
Mensajes: 14
Antigüedad: 12 años, 9 meses
Puntos: 1
Respuesta: Zend Framework

Si, GatorV tiene toda la razón error grave :P, pero aun así me sigue saliendo el mismo error de:

Uncaught Ext.Error: Unable to parse the JSON returned by the server: You're trying to decode an invalid JSON String: <br />
<b>Fatal error</b>: Class 'Paramadmin_Model_Rules' not found in <b>C:\AppServ\www\humanintelligence\application\mo dules\paramadmin\controllers\IndexController.php</b> on line <b>21</b><br />


yo creería y estoy enfocado en esa parte en que es error de la conexión a las dos bases de datos, acabo de modificar nuevamente el bootstrap y me quedo así.

protected function _initMyDb() {


$this->bootstrap('multidb');
$resource = $this->getPluginResource('multidb');
$resource->init();

$db1 = $resource->getDb('db1');
$db2 = $resource->getDb('db2');
$defaultDb = $resource->getDb();

$db2 = $resource->getDefaultDb();

$db1 = $resource->getDefaultDb();
$null = $resource->getDefaultDb(false);
Zend_Registry::set('db1', $db1);
Zend_Registry::set('db2', $db2);

}

la verdad es que ya se me están agotando las ideas...
  #8 (permalink)  
Antiguo 28/02/2012, 15:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Zend Framework

Usa una herramienta como Firebug que te permite hacer una inspección de los request AJAX, ahí puedes ver el error exacto y lo que esta regresando el servidor.

Saludos.
  #9 (permalink)  
Antiguo 28/02/2012, 15:15
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Zend Framework

El error en el json es consecuencia de la excepción, como es la estructura del modulo ? lo creaste a mano ? o con Zend_Tool ?, tienes en modules algo asi:

modules/paramadmin/models/Rules.php

Rules.php
Código PHP:
Ver original
  1. class Paramadmin_Model_Rules
  2. {}
__________________
http://es.phptherightway.com/
thats us riders :)
  #10 (permalink)  
Antiguo 28/02/2012, 15:35
 
Fecha de Ingreso: febrero-2012
Mensajes: 14
Antigüedad: 12 años, 9 meses
Puntos: 1
Respuesta: Zend Framework

si el modules tiene la estructura

modules/paramadmin/models/Rules.php

y lo cree con Zend_tool de la siguiente manera:

zf create module Rules -m paramadmin

pero el error como tal del json no me parece como algo grave debido a que sale por que el esta esperando el parametro adecuado y lo que yo le doy es un error.. el cual es que no puede conectarse a la otra base de datos

El codigo que tengo en Rules es:

class Paramadmin_Model_Rules extends Zend_Db_Table_Abstract
{............}

acabo de crear otro bootstrap en este modules haber si así funciona la conexión de las dos bases.
  #11 (permalink)  
Antiguo 28/02/2012, 17:50
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Zend Framework

En el modulo paramadmin deberías tener un Bootstrap con como minimo lo siguiente:

Código PHP:
Ver original
  1. class Paramadmin_Bootstrap extends Zend_Application_Module_Bootstrap
  2. {}

lo tienes así ?
__________________
http://es.phptherightway.com/
thats us riders :)
  #12 (permalink)  
Antiguo 29/02/2012, 07:07
 
Fecha de Ingreso: febrero-2012
Mensajes: 14
Antigüedad: 12 años, 9 meses
Puntos: 1
Respuesta: Zend Framework

Buenos días masterpuppet,

si en ese modulo tengo el Bootstrap tal cual como lo tiene, no se si debe tener algún tipo de información dentro?. o así ya estaría bn.

<?php

class Paramadmin_Bootstrap extends Zend_Application_Module_Bootstrap{

}
?>
  #13 (permalink)  
Antiguo 29/02/2012, 07:34
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Zend Framework

Buenas david1019, el autoloader no debería fallar, vamos a comprobar que el Bootstrap del modulo se esta ejecutando, dejalo asi:

Código PHP:
Ver original
  1. class Paramadmin_Bootstrap extends Zend_Application_Module_Bootstrap
  2. {
  3.     protected function _initTest()
  4.     {
  5.         die(__FUNCTION__);
  6.     }
  7. }

debería mostrarte _initTest, en el Bootstrap principal no estas pisando el autoloader ?

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #14 (permalink)  
Antiguo 29/02/2012, 07:52
 
Fecha de Ingreso: febrero-2012
Mensajes: 14
Antigüedad: 12 años, 9 meses
Puntos: 1
Respuesta: Zend Framework

Si efectivamente me muestra un mensaje _initTest, el autoloader del Bootstrap principal lo tengo configurado de la siguiente manera.

protected function _initAutoloader() {

$autoloader = Zend_Loader_Autoloader::getInstance();

$resourceAutoloader = new Zend_Loader_Autoloader_Resource(
array(
'basePath' => APPLICATION_PATH,
'namespace' => '',
'resourceTypes' => array(
'form' => array('path' => 'forms/', 'namespace' => 'Form'),
'model' => array('path' => 'models/', 'namespace' => 'Model')
)
)
);
}

El _initMyDb del Bootstrap principal lo tengo de la siguiente manera despues de muchos cambios..

protected function _initMyDb() {

$this->bootstrap('multidb');
$resource = $this->getPluginResource('multidb');

$resource->init();
$db1 = $resource->getDb('db1');
$db2 = $resource->getDb('db2');
$defaultDb = $resource->getDb();

Zend_Registry::set('db1', $db1);
Zend_Registry::set('db2', $db2);

}
  #15 (permalink)  
Antiguo 29/02/2012, 08:08
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Zend Framework

El método _initAutoloader no es necesario, deberías eliminarlo, me llama la atención como siempre crean un autoloader, los tutoriales deben estar algo atrasados, y vamos a seguir probando david1019, puedes instanciar esa clase desde otro controlador ?, si creas otro modelo te da el mismo problema ?
__________________
http://es.phptherightway.com/
thats us riders :)
  #16 (permalink)  
Antiguo 29/02/2012, 09:40
 
Fecha de Ingreso: febrero-2012
Mensajes: 14
Antigüedad: 12 años, 9 meses
Puntos: 1
Respuesta: Zend Framework

No si creo otro modelo no me da el mismo error, este error que da es debido a la segunda conexión a la base de datos....ya que los controladores y modelos que tengo asociados a la primera conexión no generan ningún error.

En cuanto al _initAutoloader no sabia buen dato.
  #17 (permalink)  
Antiguo 29/02/2012, 10:17
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 11 meses
Puntos: 845
Respuesta: Zend Framework

Son cosas diferentes, por un lado tienes el error que no encuentra el adapter configurado y por otro lado tienes el error del autoloader que no encuentra la clase, hice una prueba en local con tu configuración + el método _initMyDb y me funciona correctamente, da la impresión de que no estuviera cargando ese application.ini.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)

Etiquetas: framework
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 09:36.