Вызов всех получателей от сущности

После использования:

$queryResult =
$this
->getDoctrine()
->getRepository('EtecsaAppBundle:Paralizacion')
->createQueryBuilder('e')
->getQuery();
->setDQL($myOwnQuery)
->getResult();

У меня есть массив объектов, для которых я хочу использовать все их свойства getter. Я делаю это так:

foreach ($queryResult as $index => $itemEntity)
{
$objWorksheet->SetCellValue('A'. ($index + 17 ), $index + 1);
// ... The itemEntity class has entity relationships associations
$objWorksheet->SetCellValue('B'. ($index + 17 ), $itemEntity->getSomeRelatedProperty()->getSomeProperty());
// ... it also has properties with several types (date, string, etc)
$objWorksheet->SetCellValue('C'. ($index + 17 ), $itemEntity->getSomeProperty));
// Also some of the values obtained from his respective getter require some processing
$objWorksheet->SetCellValue('D'. ($index + 17 ), getProcessedValue($itemEntity->getSomeSpecificProperty));
}

Буква, используемая в функции SetCellValue, также будет увеличиваться. Я ставлю это в качестве примера.
Есть ли способ динамического вызова всех получателей объекта, поэтому мне не нужно вызывать их один за другим? Примерно так, например:

foreach ($queryResult as $index => $itemEntity)
{
$columnLetter = 'A';
$objWorksheet->SetCellValue($columnLetter++ . ($index + 17 ), $index + 1);

arrayOfGetters = getArrayOfGetters(itemEntity);
foreach (arrayOfGetters as $getterMethod)
{
// properties that reference an entity relationship association would have the __ToString function
$objWorksheet->SetCellValue($columnLetter++ . ($index + 17 ), /* get value of getterMethod */);
}
}

-2

Решение

Это общий ответ PHP, который должен работать в вашем случае. Попробуй это:

<?php

class Entity
{
public function setFoo($foo)
{
$this->foo = $foo;
}

public function getFoo()
{
return $this->foo;
}
}


$entity = new Entity();
$entity->setFoo('foo!');

$getters = array_filter(get_class_methods($entity), function($method) {
return 'get' === substr($method, 0, 3);
});

var_dump($getters);

Учитывая любой простой старый объект PHP, вы можете использовать get_class_methods() чтобы получить список всех методов объекта, которые видны в области, где get_class_methods() называется — в этом случае все public методы.

Затем мы фильтруем этот массив значений и возвращаем только получатели.

Для приведенного выше примера это дает:

array(1) {
[1] =>
string(6) "getFoo"}

Теперь вы можете вызывать ваши получатели динамически, например так:

foreach ($getters as $getter) {
echo $entity->{$getter}(); // `foo!`
}

Надеюсь это поможет 🙂

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]