Zend adapter globaly do laczenia z baza

0

Witam,
przyznam ze jestem poczatkujacym uzytkownikiem zenda.
Mam jednak problem ktorego do konca nie rozumiem.

Stworzylem sobie klase w modelu Application ktora wyglada tak:

namespace Application\Model;

use Zend\Db\Adapter\Adapter as DbAdapter;

class ApplicationDb extends DbAdapter
{

    public function __construct() {
        $dbAdapter = new DbAdapter(array(
            'driver' => 'Pgsql',
            'dsn'       => 'pgsql:dbname=baza1;host=localhost',
            'username' => 'postgres',
            'password' => 'root'            
        ));
        
        $this->dbAdapter = $dbAdapter;
        
        return $this->dbAdapter;
    }
}

nastepnie w pliku w ktorym chce skorzystac z bazy robie cos takiego:

use Application\Model\ApplicationDb;

$dbAdapter = new ApplicationDb();
                
$dbAdapter->query('select * from admins');

i ostatecznie dostaje blad:
Fatal error: Call to a member function createStatement() on a non-object in C:\wamp\www\baza1\vendor\zendframework\zendframework\library\Zend\Db\Adapter\Adapter.php on line 180

Dziękuje za wskazówki

0

Return w konstruktorze?

0

Zobacz sobie jak wygląda konstruktor klasy, którą rozszerzasz: https://github.com/zendframework/zf2/blob/master/library/Zend/Db/Adapter/Adapter.php#L70
Przyjmuje 2 parametry.

Po co rozszerzasz klasę, skoro wewnątrz i tak tworzysz nowy obiekt?

1

Sorry, 4 parametry.

Zrób tak:

use Zend\Db\Adapter\Adapter as DbAdapter;
 
class ApplicationDb extends DbAdapter
{
    public function __construct($driver=null, Platform\PlatformInterface $platform = null, ResultSet\ResultSetInterface $queryResultPrototype = null, Profiler\ProfilerInterface $profiler = null) {
        
        if($driver === null) {
            $driver = array(
                'driver' => 'Pgsql',
                'dsn'       => 'pgsql:dbname=baza1;host=localhost',
                'username' => 'postgres',
                'password' => 'root'            
            );
        }
        
        parent::__construct($driver, $platform, $queryResultPrototype, $profiler);
    }
}
0

Podziękował :)

0

To jest wbrew założeniom Zenda2.
Ustawienia połączenia do bazy danych ustawiasz w module.config.php .

Następnie definiujesz Service, produkcyjny:
'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory',

Przykład:
http://stackoverflow.com/questions/16715184/configure-multi-db-connections-on-zf2

Twoje rozwiązanie powoduje, że ile razy zrobisz klasę ApplicationDb , to tyle razy się PHP połączy się z bazą danych - a maxymalnie może to zrobić 1 raz.

Zainteresuj się serwisami, i ściągnij jakiś skeleton to zenda 2

Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1