Добрый вечер всем, я использую API Platform, и я хотел бы автоматически добавлять владельца к своим сущностям при их создании.Я создал Событие, чтобы переопределить Платформу API, которая берет текущего пользователя и добавляет его.Но мое Событие никогда не выключается, но оно существует в отладке: event-dispatcher
namespace App\EventSubscriber;
use ApiPlatform\Core\EventListener\EventPriorities;
use App\Entity\MediaObject;
use App\Entity\User;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
final class AddOwnerToEntity implements EventSubscriberInterface {
/**
* @var TokenStorageInterface
*/
private $tokenStorage;
public function __construct(TokenStorageInterface $tokenStorage) {
$this->tokenStorage = $tokenStorage;
}
public static function getSubscribedEvents() {
return [
KernelEvents::VIEW => ['attachOwner', EventPriorities::PRE_WRITE],
];
}
public function attachOwner(GetResponseForControllerResultEvent $event) {
$entity = $event->getControllerResult();
$method = $event->getRequest()->getMethod();
if (!$entity instanceof MediaObject || Request::METHOD_POST !== $method) {
// Only handle Article entities (Event is called on any Api entity)
return;
}
// maybe these extra null checks are not even needed
$token = $this->tokenStorage->getToken();
if (!$token) {
return;
}
$owner = $token->getUser();
if (!$owner instanceof User) {
return;
}
$entity->setOwner($owner);
}
}
Я получаю сообщение об ошибке вставки базы данных, сообщающее, что пользователь имеет значение null.Если в функции attachOwner () я делаю var_dump или выход, ничего не меняется.Есть ли у вас какие-либо идеи?Большое спасибо, Гийом
РЕДАКТИРОВАТЬ Моя загадка, код работает для объектов, управляемых ядром платформы API, но не для системы загрузки, описанной здесь: https://api -platform.com/docs/core/file-upload/#handling-file-upload-1 Было просто необходимо добавить следующую строку:
public function __invoke(Request $request): MediaObject {
[...]
$mediaObject->setOwner($this->getUser());
[...]
}
Если это поможет .... Гийом