On Feb 6, 2008 2:44 PM, Eric Coleman <[EMAIL PROTECTED]> wrote:
> Zend_Db::factory() can take a native Config Object.
>
> The config object below, would be used like so:
>
> $config = Zend_Config_Xml('my-config.xml', 'application');
> $db = Zend_Db::factory($config->database);
>
> Note, the profiler line should also work ;)
>
>
> <?xml version="1.0" encoding="UTF-8"?>
> <myapp>
> <application>
> <debug>1</debug>
>
> <database>
> <adapter>PDO_MYSQL</adapter>
> <initQuery>set names 'utf8';</initQuery>
>
> <params>
> <host>localhost</host>
> <username>eric</username>
> <password>mypass</password>
> <dbname>devel</dbname>
> <profiler>1</profiler>
> </params>
> </database>
>
> </application>
> </myapp>
>
> Regards,
> Eric
>
>
>
>
> On Feb 6, 2008, at 1:20 AM, Garri Santos wrote:
>
> > On Feb 6, 2008 11:33 AM, Garri Santos
> > <[EMAIL PROTECTED]> wrote:
> >
> >> On Feb 6, 2008 11:22 AM, Matthew Weier O'Phinney <[EMAIL PROTECTED]>
> >> wrote:
> >>
> >>> -- Garri Santos <[EMAIL PROTECTED]> wrote
> >>> (on Wednesday, 06 February 2008, 10:43 AM +0800):
> >>>> Good Day,
> >>>>
> >>>> Im not sure anymore whether it's my xml file or is it
> >>>> Zend_Config_Xml
> >>> has the
> >>>> problem. Here's my xml file.
> >>>>
> >>>> config.xml
> >>>> <?xml version="1.0" encoding="UTF-8" ?>
> >>>> <configuration>
> >>>> <default>
> >>>> <baseurl>/ubraa/public</baseurl>
> >>>> <database>
> >>>> <type>pdo_mysql</type>
> >>>> <host>localhost</host>
> >>>> <username>root</username>
> >>>> <password>password</password>
> >>>> <dbname>ubraa</dbname>
> >>>> </database>
> >>>> </default>
> >>>> </configuration>
> >>>>
> >>>> After doing this:
> >>>>
> >>>> $this->config = new Zend_Config_Xml($this->ubraaRoot .
> >>> DIRECTORY_SEPARATOR .
> >>>> 'configuration' . DIRECTORY_SEPARATOR .
> >>>> 'config.xml', 'default');
> >>>>
> >>>> The Zend_Db::factory($config->type, $config); is throwing me an
> >>>> error
> >>>
> >>> Um... shouldn't that be
> >>>
> >>> Zend_Db::factory($config->database->type, $config->database);
> >>>
> >>> ?
> >>>
> >>> Based on the structure of your XML, you're not pulling from the
> >>> correct
> >>> location in the config...
> >>>
> >>>
> >>>> Adapter parameters must be in an array or a Zend_Config object
> >>>>
> >>>> I have var_dump($this->config->database) and these is the result:
> >>>>
> >>>> object(Zend_Config_Xml)#2 (6) {
> >>>> ["_allowModifications:protected"]=>
> >>>> bool(false)
> >>>> ["_index:protected"]=>
> >>>> int(0)
> >>>> ["_count:protected"]=>
> >>>> int(2)
> >>>> ["_data:protected"]=>
> >>>> array(2) {
> >>>> ["baseurl"]=>
> >>>> string(13) "/ubraa/public"
> >>>> ["database"]=>
> >>>> object(Zend_Config)#4 (6) {
> >>>> ["_allowModifications:protected"]=>
> >>>> bool(false)
> >>>> ["_index:protected"]=>
> >>>> int(0)
> >>>> ["_count:protected"]=>
> >>>> int(5)
> >>>> ["_data:protected"]=>
> >>>> array(5) {
> >>>> ["type"]=>
> >>>> string(9) "pdo_mysql"
> >>>> ["host"]=>
> >>>> string(9) "localhost"
> >>>> ["username"]=>
> >>>> string(4) "root"
> >>>> ["password"]=>
> >>>> string(8) "password"
> >>>> ["dbname"]=>
> >>>> string(5) "ubraa"
> >>>> }
> >>>> ["_loadedSection:protected"]=>
> >>>> NULL
> >>>> ["_extends:protected"]=>
> >>>> array(0) {
> >>>> }
> >>>> }
> >>>> }
> >>>> ["_loadedSection:protected"]=>
> >>>> string(7) "default"
> >>>> ["_extends:protected"]=>
> >>>> array(0) {
> >>>> }
> >>>> }
> >>>>
> >>>> Notice that the Zend_Config produce by the Zend_Config_Xml is
> >>>> missing
> >>> "params"
> >>>> w/c should contain a correct Zend_Config Object like this:
> >>>> $configuration = new Zend_Config(
> >>>> array(
> >>>> 'database' => array(
> >>>> 'adapter' => 'Mysqli',
> >>>> 'params' => array(
> >>>> 'dbname' => 'test',
> >>>> 'username' => 'webuser',
> >>>> 'password' => 'secret',
> >>>> )
> >>>> )
> >>>> )
> >>>> );
> >>>>
> >>>> object(Zend_Config)#32 (6) {
> >>>> ["_allowModifications:protected"]=>
> >>>> bool(false)
> >>>> ["_index:protected"]=>
> >>>> int(0)
> >>>> ["_count:protected"]=>
> >>>> int(1)
> >>>> ["_data:protected"]=>
> >>>> array(1) {
> >>>> ["database"]=>
> >>>> object(Zend_Config)#40 (6) {
> >>>> ["_allowModifications:protected"]=>
> >>>> bool(false)
> >>>> ["_index:protected"]=>
> >>>> int(0)
> >>>> ["_count:protected"]=>
> >>>> int(2)
> >>>> ["_data:protected"]=>
> >>>> array(2) {
> >>>> ["adapter"]=>
> >>>> string(6) "Mysqli"
> >>>> ["params"]=>
> >>>> object(Zend_Config)#43 (6) {
> >>>> ["_allowModifications:protected"]=>
> >>>> bool(false)
> >>>> ["_index:protected"]=>
> >>>> int(0)
> >>>> ["_count:protected"]=>
> >>>> int(3)
> >>>> ["_data:protected"]=>
> >>>> array(3) {
> >>>> ["dbname"]=>
> >>>> string(4) "test"
> >>>> ["username"]=>
> >>>> string(7) "webuser"
> >>>> ["password"]=>
> >>>> string(6) "secret"
> >>>> }
> >>>> ["_loadedSection:protected"]=>
> >>>> NULL
> >>>> ["_extends:protected"]=>
> >>>> array(0) {
> >>>> }
> >>>> }
> >>>> }
> >>>> ["_loadedSection:protected"]=>
> >>>> NULL
> >>>> ["_extends:protected"]=>
> >>>> array(0) {
> >>>> }
> >>>> }
> >>>> }
> >>>> ["_loadedSection:protected"]=>
> >>>> NULL
> >>>> ["_extends:protected"]=>
> >>>> array(0) {
> >>>> }
> >>>> }
> >>>>
> >>>>
> >>>> Thanks,
> >>>> Garri
> >>>
> >>> --
> >>> Matthew Weier O'Phinney
> >>> PHP Developer | [EMAIL PROTECTED]
> >>> Zend - The PHP Company | http://www.zend.com/
> >>>
> >>
> >> Hi Matthew,
> >>
> >> I have tried your suggestion but still no luck. Here's the part
> >> that uses
> >> $this->config.
> >>
> >> public function getDb()
> >> {
> >> if (null === $this->_services['db']) {
> >> $config = $this->config->database;
> >> //$this->_services['db'] = Zend_Db::factory($config->type,
> >> $config);
> >> $this->_services['db'] =
> >> Zend_Db::factory($config->database->type, $config->database);
> >> }
> >>
> >> return $this->_services['db'];
> >> }
> >>
> >> As you can see I have already assigned $this->config->database to
> >> $config.
> >> Though I have tried what you have suggest again it's throwing me
> >> the same
> >> error.
> >>
> >
> > Good Day,
> >
> > It's finally working now thanks to all you guys here and SpotSec at
> > #zftalk.
> >
> > Can we remove "or a Zend_Config object" in the Zend/Db.php line no.
> > 217 it's
> > confusing since the code block is just checking if the passed
> > parameter
> > $config is an array.
> >
> > /*
> > * Verify that adapter parameters are in an array.
> > */
> > if (!is_array($config)) {
> > /**
> > * @see Zend_Db_Exception
> > */
> > require_once 'Zend/Db/Exception.php';
> > throw new Zend_Db_Exception('Adapter parameters must be
> > in an
> > array or a Zend_Config object');
> > }
> >
> > and the fix is to call toArray() method. Instead of passing a
> > Zend_Config
> > object for the $config parameters in Zend_Db::factory($adapter,
> > $config);
> >
> >
> > Cheers,
> > Garri
>
>
Hi Eric,
Your solution also worked for me. Thanks you made it a lot shorter. I
was passing the Zend_Config object in the 2nd argument for
Zend_Db::factory($adapter, $config) since I was following the example
in the Zend Framework and Access Control Webinar.
Cheers,
Garri