Mat*_*ari 0 php zend-framework2
我正在尝试使用最新技术为学习目的设置一个新的Web应用程序:apache 2.4,PHP 5.4和PostgreSQL 9.1
我选择使用Zend Framework 2进行开发.
在我的主模块中,我定义了这个方法:
public function getServiceConfiguration() {
return array(
'factories' => array(
'adapter' => function ($sm) {
$config = $sm->get('config');
$adapter = new Adapter($config['db']);
return $adapter;
}
),
);
}
Run Code Online (Sandbox Code Playgroud)
$ config ['db']在我的autoload/global.php中定义,其中包含:
return array(
'db' => array(
'driver' => 'PDO',
'dsn' => 'pgsql:host=localhost;port=5436;user=root;password=myrootpwd',
)
);
Run Code Online (Sandbox Code Playgroud)
但是当我尝试调用$ serviceManager-> get('adapter')时,我得到一个异常说:
致命错误:未捕获的异常'Zend\Db\Adapter\Exception\InvalidArgumentException',消息'提供的或实例化的驱动程序对象未在C:\ Program Files\626Suite\application\library中实现Zend\Db\Adapter\Driver\DriverInterface'第294行\ Zend\ServiceManager\ServiceManager.php
Zend\Db\Adapter\Exception\InvalidArgumentException:提供的或实例化的驱动程序对象未在C:\ Program Files\626Suite\application\library\Zend\Db\Adapter\Adapter.php中实现Zend\Db\Adapter\Driver\DriverInterface在80号线上
调用堆栈:
0.0015 121600 1. {main}()C:\ Program Files\626Suite\application\data\script\install.php:0
0.5699 936080 2. Zend\ServiceManager\ServiceManager-> get(string(7),? ??)C:\ Program Files\626Suite\application\data\script\install.php:7
0.5700 936440 3. Zend\ServiceManager\ServiceManager-> create(array(2))C:\ Program Files\626Suite\application\library\Zend\ServiceManager\ServiceManager.php:277
0.5701 936520 4. Zend\ServiceManager\ServiceManager-> createServiceViaCallback(类Closure,string(7),string(7))C:\ Program Files\626Suite\application\library\Zend\ServiceManager\ServiceManager.php:353
0.5701 936672 5. call_user_func(类Closure,类Zend\ServiceManager\ServiceManager,string(7),string(7))C:\ Program Files\626Suite\application\library\Zend\ServiceManager\ServiceManager.php:543
0.5701 936696 6. Age\Module-> Age {closure}(类Zend\ServiceManager\ServiceManager,string(7),string(7))C:\ Program Files\626Suite\application\library\Zend\ServiceManager\ServiceManager.php:543
0.6 047 1024184 7. Zend\Db\Adapter\Adapter - > __ construct(类Zend\Config\Config,???,???)C:\ Program Files\626Suite\application\module\Age\Module.php:43
编辑:
我试图将工厂修改为:
public function getServiceConfiguration() {
return array(
'factories' => array(
'adapter' => function ($sm) {
$config = $sm->get('config');
$PDO = new \PDO($config['db']['dsn']);
$adapter = new Adapter($PDO);
return $adapter;
}
),
);
}
Run Code Online (Sandbox Code Playgroud)
我首先得到一个错误,说数据库"root"不存在,但在将我的配置更改为:
return array(
'db' => array(
'driver' => 'PDO',
'dsn' => 'pgsql:host=localhost;port=5436;dbname=postgres;user=root;password=myrootpwd',
)
);
Run Code Online (Sandbox Code Playgroud)
我回到了获得之前描述的异常.
以下适用于我:
/config/autoload/database.global.php
return array(
'db' => array(
'driver' => 'Pdo',
'dsn' => "pgsql:host=127.0.0.1;dbname=mydb",
'username' => 'username',
'password' => 'mypass',
),
);
Run Code Online (Sandbox Code Playgroud)
/module/Application/Module.php
public function getServiceConfiguration()
{
return array(
'factories' => array(
'db_adapter' => function($sm) {
$config = $sm->get('Configuration');
$dbAdapter = new \Zend\Db\Adapter\Adapter($config['db']);
return $dbAdapter;
}
),
);
}
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样使用它:
$sql = "SELECT * FROM table WHERE field=?";
$statement = $this->adapter->query($sql);
$res = $statement->execute(array($var));
Run Code Online (Sandbox Code Playgroud)