gpt4 book ai didi

symfony - 自动将所有者设置为实体 - API 平台

转载 作者:行者123 更新时间:2023-12-05 07:29:30 26 4
gpt4 key购买 nike

大家晚上好我使用 API 平台,我想在创建实体时自动将所有者添加到我的实体中。我创建了一个事件来覆盖 API 平台,它获取当前用户并添加它。但是我的事件永远不会发生,但它确实存在于 debug: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);
}
}

我收到数据库插入错误,告诉我用户为空。如果在 attachOwner() 函数中执行 var_dump 或退出,则没有任何变化。你有什么想法?非常感谢你,纪尧姆

编辑Mystake,代码适用于 API 平台核心管理的对象,但不适用于此处描述的上传系统:https://api-platform.com/docs/core/file-upload/#handling-file-upload-1只需要添加以下行:

public function __invoke(Request $request): MediaObject {
[...]
$mediaObject->setOwner($this->getUser());

[...]
}

如果有帮助....纪尧姆

最佳答案

我想你忘了坚持并刷新实体。使用依赖注入(inject)插入 EntityManagerInterface $em 并在方法末尾持久化+刷新实体。

关于symfony - 自动将所有者设置为实体 - API 平台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52724544/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com