Reputation: 1466
I am following https://zf2-docs.readthedocs.org/en/latest/in-depth-guide/zend-db-sql-zend-stdlib-hydrator.html
Here is my code
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()));
}
}
module.config.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'
)
),
Problem:
It is showing error like
Catchable fatal error: Argument 2 passed to Blog\Mapper\ZendDbSqlMapper::__construct() must implement interface Zend\Stdlib\Hydrator\HydratorInterface, none given, called in /var/www/zend2/module/Blog/src/Blog/Factory/ZendDbSqlMapperFactory.php on line 16 and defined in /var/www/zend2/module/Blog/src/Blog/Mapper/ZendDbSqlMapper.php on line 21
I do not understand why it is not detecting HydratorInterface
.Is it deprecated like https://github.com/zendframework/zend-stdlib/issues/25
I am using Zend framework 2.3.3
Upvotes: 0
Views: 618
Reputation: 44383
You forgot a bracket when constructing your ZendDbSqlMapper
instance, that is why the second and third parameter aren't passed.
Here you go wrong:
return new ZendDbSqlMapper($serviceLocator->get('Zend\Db\Adapter\Adapter',new ClassMethods(false),new Post()));
<-- ) missing <-- ) too many
Try like this:
return new ZendDbSqlMapper(
$serviceLocator->get('Zend\Db\Adapter\Adapter'),
new ClassMethods(false),
new Post()
);
Upvotes: 0