Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 06-11-2013 12:18:09

JiBe
Membre
Lieu: Brabant Wallon, Belgique
Date d'inscription: 27-06-2007
Messages: 16

custom repository avec ZfrRest et Doctrine2

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.

Code:

[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 :

Code:

[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 :

Code:

[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

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages