2015-04-09 5 views
0

У меня проблема, что у меня есть два контроллера. Один из них - это резервный контроллер, который обрабатывает только данные json и возвращает JsonModel, а другой - контроллер по умолчанию, который возвращает ViewModel Теперь у меня есть проблема, что мой метод возвращает только array объектов, что является правильным для значения по умолчанию контроллер, но мой restful контроллер нуждается в объектах в виде массива. Как я могу справиться с этим?Результат репозитория ZF2 Doctrine2 как массив

MealController

class MealController extends AbstractRestfulController { 
    protected $mealService; 

    public function getList() { 
     $meals = $this->mealService->getAllMeals(); 

     return new JsonModel($meals); 
    } 
} 

MealService

class MealService { 
    protected $mealRepository; 

    public function getAllMeals() { 
     return $this->mealRepository->findAll(); 
    } 
} 

MealRepository

class MealRepository extends EntityRepository { 
    public function findAll() { 
     $queryBuilder = $this->createQueryBuilder('meal') 
      ->orderBy('title'); 

     return $queryBuilder->getQuery()->getResult(); 
    } 
} 

ответ

0

Вы coud у se для этого Array Hydration. Он позволяет указать режим гидратации при выполнении запросов и изменить тип данных возвращенных результатов. Вам просто нужно использовать константу Query::HYDRATE_ARRAY в качестве параметра в вашем getResult() метод:

public function findAll() { 
    $queryBuilder = $this->createQueryBuilder('meal') 
     ->orderBy('title'); 

    return $queryBuilder->getQuery()->getResult(Doctrine\ORM\Query::HYDRATE_ARRAY); 
} 

Может быть, вы могли бы также взглянуть на EntitySerializer класс, который позволит вам создать массив JSON из объекта:

$entitySerializer = new EntitySerializer($em); 
$entityAsArray = $entitySerializer->toArray($entity); 

Надеюсь, что это поможет.

+0

Array Hydration выглядит хорошо, но в этом случае метод всегда возвращает массив. Но также кажется странным добавить параметр $ hydration в мой метод обслуживания «getAllMeals» и метод репозитория «findAll», или это будет правильным? Итак, у меня было бы: 'public function getAllMeals ($ hydration = Doctrine \ ORM \ Query :: HYDRATE_OBJECT); public function findAll ($ hydration = Doctrine \ ORM \ Query :: HYDRATE_OBJECT); ' –

+0

Я не знаю, есть ли лучший способ, но да, вы могли бы это сделать, это не так сильно ;-) – blackbishop

+0

Ok I ' Я сделаю так! Благодаря ;-) –

Смежные вопросы