Вопрос действительно относится к лучшей практике и возможно ли то, что у меня в голове. Я запрашиваю коллекцию сущностей-членов, используя функцию репозитория, например (упрощенно)
/**
* @return Query
*/
public function findAllMembersOrderedByNameResult()
{
return $this->createQueryBuilder('m')
->orderBy('m.lastName', 'ASC')
->getQuery()
->getResult()
;
}
Я вызываю это в моем контроллере:
$members = $em->getRepository(Member::class)->findAllMembersOrderedByNameResult();
Теперь я передаю приведите это к моему файлу шаблона ветки и смогу l oop через это и отобразить информацию о каждом члене как часть foreach l oop:
{% for member in members %}
{{member.firstName}}
{% endfor %}
Это, очевидно, работает нормально, однако у меня есть потребность Теперь добавим некоторые дополнительные данные каждому члену для передачи в шаблон веточки. Так, например, используя DateOfBirth в сущности Member, я хочу выполнить это через функцию, чтобы определить возраст члена для отображения в шаблоне Twig. Поэтому в данный момент я выполняю этот вызов в Controller, а затем передаю его в шаблон, создавая MembersArray
, перебирая возвращенную коллекцию $ members и добавляя результат new age и целый Member в виде двух отдельных значений в массив, например:
foreach($members as $member)
{
$membersArray[] = array(
'member' => $member,
'age' => $age
)
}
Это работает, однако в моем шаблоне Twig мне теперь нужно использовать
{% for member in membersArray %}
{{member.member.firstName}}
{{member.age}
{% endfor %}
Было бы гораздо приятнее просто добавить age
в коллекцию без создания массива, поэтому я могу просто использовать member.firstName
и member.age
, но для жизни не могу найти способ, как без необходимости l oop вручную просматривать все значения и устанавливать их в новый массив, который кажется огромной тратой кода.
Я хочу добавить больше, чем просто возраст, это просто упрощенный пример. Использование Symfony 4.4 и PHP 7.3 в случае, если это требуется для всего, что требуется:
Редактировать: Структура объекта в соответствии с запросом (сокращение):
namespace App\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="App\Repository\MemberRepository")
*/
class Member
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $firstName;
/**
* @ORM\Column(type="date", nullable=true)
*/
private $dateOfBirth;
...