Я думаю о логике, платформа API использует компонент restfull.Когда вы перехватываете getItem, вы в основном используете этот маршрут:
http://example/api/event/id
в этой части мы должны попытаться выяснить, что происходит
public function getItem(string $resourceClass, $id, string $operationName = null, array $context = []): ?Event
{
return new Event($id);
}
в предыдущем кодевопрос, вы не упомянули о том, что класс Event имеет конструктор, поэтому, в основном, когда ApiPlatform пытается извлечь атрибут index или id, ответ имеет значение null, а затем структура restfull нарушается.Они не могут сгенерировать повторный URL-адрес следующим образом:
http://example/api/event/null ????
Попробуйте установить в конструкторе параметр $ id, например, следующим образом:
class
{
private $id;
public function __constructor($id)
{
$this->id = $id;
}
}
, так как комментарий не является обязательным. Returnточный класс в getItem в ApiPlatform, вы можете попробовать это:
public function getItem(string $resourceClass, $id, string $operationName = null, array $context = [])
{
return ['id'=> $id]
}
ОБНОВЛЕНИЕ:
<?php
namespace App\DataProvider;
use ApiPlatform\Core\DataProvider\ItemDataProviderInterface;
use ApiPlatform\Core\DataProvider\RestrictedDataProviderInterface;
use ApiPlatform\Core\Exception\ResourceClassNotSupportedException;
use Doctrine\ORM\EntityManagerInterface;
use App\Entity\Event;
final class EventItemDataProvider implements ItemDataProviderInterface, RestrictedDataProviderInterface
{
private $repository;
/**
* UserDataProvider constructor.
*/
public function __construct(EntityManagerInterface $entityManager)
{
$this->repository = $entityManager->getRepository(Event::class);
}
public function supports(string $resourceClass, string $operationName = null, array $context = []): bool
{
return Event::class === $resourceClass;
}
public function getItem(string $resourceClass, $id, string $operationName = null, array $context = []): ?Event
{
// Retrieve the blog post item from somewhere then return it or null if not found
return $this->repository->find($id);
}
}