/** * Create the fieldset. * * {@inheritDoc} * * @return EmployeeFieldset */ public function createService(ServiceLocatorInterface $serviceLocator) { /* @var $serviceLocator \Zend\ServiceManager\AbstractPluginManager */ $services = $serviceLocator->getServiceLocator(); $fieldset = new EmployeeFieldset(); $hydrator = new \Zend\Hydrator\ClassMethods(false); //new EntityHydrator(); $repositories = $services->get('repositories'); $users = $repositories->get('Auth/User'); /* @var $users \Auth\Repository\User */ /* todo: WRITE own Hydrator strategy class */ $strategy = new ClosureStrategy(function ($object) use($users) { if (is_string($object)) { return $users->find($object); } return $object; }, function ($data) use($users) { if (is_string($data)) { $data = $users->find($data); } return $data; }); /* todo: write own strategy class */ $permStrategy = new ClosureStrategy(function ($object) { /* @var $object \Organizations\Entity\EmployeePermissionsInterface */ $values = array(); foreach (array(Perms::JOBS_VIEW, Perms::JOBS_CHANGE, PERMS::JOBS_CREATE, Perms::APPLICATIONS_VIEW, Perms::APPLICATIONS_CHANGE) as $perm) { if ($object->isAllowed($perm)) { $values[] = $perm; } } return $values; }, function ($data) { $permissions = array_reduce($data, function ($c, $i) { return $c | $i; }, 0); return new EmployeePermissions($permissions); }); $hydrator->addStrategy('user', $strategy); $hydrator->addStrategy('permissions', $permStrategy); $fieldset->setHydrator($hydrator); $fieldset->setObject(new \Organizations\Entity\Employee()); return $fieldset; }
public function findAll() { // $select = new \Zend\Db\Sql\Select('contact'); // $select->columns(array('prenom', 'nom')); // $select->limit(100); // $rs = $this->gateway->selectWith($select); // TODO ajouter une clause LIMIT $rs = $this->gateway->select(); $tabContacts = $rs->toArray(); $contacts = array(); $hydrator = new \Zend\Hydrator\ClassMethods(); foreach ($tabContacts as $contactAssoc) { $contact = new \AddressBook\Entity\Contact(); $hydrator->hydrate($contactAssoc, $contact); // $contact->setId($contactAssoc['id']) // ->setPrenom($contactAssoc['prenom']) // ->setNom($contactAssoc['nom']) // ->setEmail($contactAssoc['email']) // ->setTelephone($contactAssoc['telephone']); $contacts[] = $contact; } return $contacts; }