API-платформа - Итерация ресурса через IRI

В моем приложении Symfony у меня есть подписчик, и мне нужно перебирать IRI, хранящиеся в массиве, и получать доступ к методам их сущностей. Как я могу это сделать?

Например:

function sendMail ($event) {
    ...
    $instance = $event->getControllerResult();
    ...
    $recipients = $instance->getRecipients(); // returns array of IRIs
    foreach ($recipients as $recipient) {
        $r = // instance of IRI-associated entity
        if ($r instanceof User) {
            // send to user
            $email = $r->getEmail();
            // send an email
        } else if ($r instanceof Group) {
            // send to group
            foreach ($r->getUsers() as $user) {
                $email = $user->getEmail();
                // send an email
            }
        }
    }
    ...
}

Хотя я, вероятно, упустил это из виду, я не нашел способа сделать это в документации, и мои знания о Symfony все еще растут.


person KinMeister    schedule 06.08.2020    source источник


Ответы (1)


Вы можете попробовать передать IriConverterInterface $iriConverter в __constructor. И преобразуйте свой Ири в объект, например:

private $iriConverter;

public function __construct(IriConverterInterface $iriConverter)
{
    $this->iriConverter = $iriConverter;
}

public function sendMail ($event) {
   foreach ($recipients as $recipientIri) {
        $recipient = $iriConverter->getItemFromIri($recipientIri)
        if ($recipient instanceof User) {
            $email = $recipient->getEmail();
            ...
        } 
    ...
    }
}

person Kate Syrotchuk    schedule 06.08.2020
comment
Бум! Спасибо. Это именно то, что я искал. Это сработало идеально. - person KinMeister; 07.08.2020