Metoda $genus->getNotes()
zwraca ArrayCollection
z elementami typu GenusNote
. Wygląda ona tak:
/**
* @return ArrayCollection|GenusNote[]
*/
public function getNotes()
{
return $this->notes;
}
Dzięki adnotacjom przy wywołaniu metody $genus->getNotes()
phpstorm podpowiada mi metody ArrayCollection
, a przy iteracji GenusNote
. Niestety jeżeli użyję metody np. filter
, to phpstorm już się gubi i przy iteracji nie podpowiada metod typu GenusNote
.
$notesCollection = $genus->getNotes()->filter(function(GenusNote $note) {
return $note->getCreatedAt() > new \DateTime('-3 months');
});
$notes = [];
foreach ($notesCollection as $note) {
// brak podpowiedzi
$notes[] = [
'id' => $note->getId(),
'username' => $note->getUsername(),
'avatarUri' => '/images/' . $note->getUserAvatarFilename(),
'note' => $note->getNote(),
'date' => $note->getCreatedAt()->format('M d, Y')
];
}
Rozwiązaniem jest wygenerowanie adnotacji - które jest stosunkowo szybkie, bo alt +enter na zmiennej kolekcji - i podanie typu:
/** @var GenusNote[] $notesCollection */
$notesCollection = $genus->getNotes()->filter(function(GenusNote $note) {
return $note->getCreatedAt() > new \DateTime('-3 months');
});
Dzięki temu w foreachu
mamy podpowiedzi i wszystko gra :) Czy znacie jakiś sposób, który pozwoli osiągnąć coś takiego bez dodatkowych adnotacji, coś w stylu ArrayCollection<GenusNote>
?