Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Pour retourner un tableau complètement séréaliser en JSON (dépendances comprises) j'ai trouvé cette solution en utilisant le QueryBuilder de Doctrine.
[lang=php] class ModuleRepository extends EntityRepository { public function listQuery($filters) { /** (...) */ return $queryBuilder->getQuery()->getResult(\Doctrine\ORM\AbstractQuery::HYDRATE_ARRAY); } }
Cela implique de créer des méthodes personnalisées dans le Repository.
Mais avec le module ZfrRest je ne comprends pas comment réaliser ces appels. La fonction get utilise un Zend\Paginator par défaut.
Si bakura passe par ici je suis preneur d'un coup de pouce.
Repository :
[lang=php] namespace Application\Repository; use Doctrine\ORM\EntityRepository; /** * ModuleRepository * * This class was generated by the Doctrine ORM. Add your own custom * repository methods below. */ class ModuleRepository extends EntityRepository { public function listQuery($filters) { $queryBuilder = $this->getEntityManager()->createQueryBuilder(); $queryBuilder->select(array('m','p')) ->from("\Application\Entity\Module","m") ->leftJoin("m.parent", "p", "WITH", "m.fkmoduleparent = p.id"); if ($filters["moduleName"] && $filters["moduleName"]!== '') { $queryBuilder->andWhere($queryBuilder->expr()->like("m.classname", ":moduleName")) ->setParameter(":moduleName", $filters["moduleName"] . "%"); } if ($filters["moduleParent"] !== '' && $filters["moduleParent"] >= 0) { $queryBuilder->andWhere($queryBuilder->expr()->eq("m.fkmoduleparent", ":moduleParent")) ->setParameter(":moduleParent", $filters["moduleParent"]); } if ($filters["moduleActive"] !== '' && ($filters["moduleActive"] == "true" || $filters["moduleActive"] == "false")) { $moduleActive = ($filters["moduleActive"] == "true") ? 1 : 0; $queryBuilder->andWhere($queryBuilder->expr()->eq("m.active", ":moduleActive")) ->setParameter(":moduleActive", $moduleActive); } return $queryBuilder->getQuery() ->getResult(\Doctrine\ORM\AbstractQuery::HYDRATE_ARRAY); } }
Controller :
[lang=php] namespace Application\Controller; use Zend\Paginator\Paginator; use ZfrRest\Mvc\Controller\AbstractRestfulController; class ModuleListController extends AbstractRestfulController { public function get(Paginator $module) { $filters = array(); $filters["moduleName"] = $this->params()->fromQuery("moduleName", ""); $filters["moduleParent"] = $this->params()->fromQuery("moduleParent", ""); $filters["moduleActive"] = $this->params()->fromQuery("moduleActive", ""); $module->setCurrentPageNumber(1); $module->setItemCountPerPage($module->getTotalItemCount()); // $module->queryList($filters); return $module; }
Hors ligne