我正在关注 https://zf2-docs.readthedocs.org/en/latest/in-depth-guide/zend-db-sql-zend-stdlib-hydrator.html
这是我的代码
ZendDbSqlMapper.php
namespace Blog'Mapper;
use Blog'Model'PostInterface;
use Zend'Db'Adapter'AdapterInterface;
use Zend'Db'Adapter'Driver'ResultInterface;
use Zend'Db'ResultSet'ResultSet;
use Zend'Db'ResultSet'HydratingResultSet;
use Zend'Db'Sql'Sql;
use Zend'Stdlib'Hydrator'HydratorInterface;
class ZendDbSqlMapper implements PostMapperInterface{
protected $dbAdapter;
protected $hydrator;
protected $postPrototype;
public function __construct(AdapterInterface $dbAdapter,HydratorInterface $hydrator,PostInterface $postPrototype) {
$this->dbAdapter = $dbAdapter;
$this->hydrator = $hydrator;
$this->postPrototype = $postPrototype;
}
public function find($id){
}
public function findAll()
{
$sql = new Sql($this->dbAdapter);
$select = $sql->select('posts');
$stmt = $sql->prepareStatementForSqlObject($select);
$result = $stmt->execute();
if($result instanceof ResultInterface && $result->isQueryResult())
{
$resultSet = new HydratingResultSet($this->hydrator,$this->postPrototype);
return $resultSet->initialize($result);
}
return array();
}
}
ZendDbSqlMapperFactory.php
namespace Blog'Factory;
use Blog'Mapper'ZendDbSqlMapper;
use Blog'Model'Post;
use Zend'ServiceManager'FactoryInterface;
use Zend'ServiceManager'ServiceLocatorInterface;
use Zend'Stdlib'Hydrator'ClassMethods;
class ZendDbSqlMapperFactory implements FactoryInterface{
public function createService(ServiceLocatorInterface $serviceLocator) {
return new ZendDbSqlMapper($serviceLocator->get('Zend'Db'Adapter'Adapter',new ClassMethods(false),new Post()));
}
}
模块配置.php
'service_manager'=>array(
'factories'=>array(
'Blog'Mapper'PostMapperInterface'=>'Blog'Factory'ZendDbSqlMapperFactory',
'Blog'Service'PostServiceInterface'=>'Blog'Factory'PostServiceFactory',
'Zend'Db'Adapter'Adapter'=>'Zend'Db'Adapter'AdapterServiceFactory'
)
),
问题:
它显示错误,例如
可捕获的致命错误:参数 2 传递给 Blog''Mapper''ZendDbSqlMapper::__construct() 必须实现接口 Zend''Stdlib''Hydrator''HydratorInterface,没有给出,调用 /var/www/zend2/module/Blog/src/Blog/Factory/ZendDbSqlMapperFactory.php 在第 16 行并在 /var/www/zend2/module/Blog/src/Blog/Mapper/ZendDbSqlMapper.php on line 21
我不明白为什么它没有检测到HydratorInterface
.它是否像 https://github.com/zendframework/zend-stdlib/issues/25 一样被弃用
我正在使用Zend framework 2.3.3
构造
ZendDbSqlMapper
实例时忘记了括号,这就是不传递第二个和第三个参数的原因。
在这里你错了:
return new ZendDbSqlMapper($serviceLocator->get('Zend'Db'Adapter'Adapter',new ClassMethods(false),new Post()));
<-- ) missing <-- ) too many
尝试如下:
return new ZendDbSqlMapper(
$serviceLocator->get('Zend'Db'Adapter'Adapter'),
new ClassMethods(false),
new Post()
);