Я использую Api-платформу в качестве бэкенда для проекта. Он отправляет данные из класса под названием «Voiture». Но мне не нужны все элементы "Voiture", у этого класса есть логический элемент с именем Parked.
И я хочу отправлять только те элементы, где Parked = true. Возможно ли это сделать, я не думаю, что было бы целесообразно фильтровать данные с принимающей стороны.
это мой класс "Voiture":
<?php
namespace App\Entity;
use ApiPlatform\Core\Annotation\ApiResource;
/**
* @ApiResource(
* attributes = {"order" = {"gareele": "DESC"}}
* )
* @ORM\Entity(repositoryClass = "App\Repository\VoitureRepository")
* @ApiFilter(
* SearchFilter::class,
* properties = {
* "matricule": "partial"
* }
* )
*/
class Voiture
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type = "integer")
* @Groups({"toute"})
*/
private $id;
/**
* @ORM\Column(type = "string", length=200)
* @Groups({"toute"})
*/
private $matricule;
/**
* @ORM\Column(type = "boolean")
* @Groups({"toute"})
*/
private $parked;
public function getId(): ?int
{
return $this->id;
}
public function getMatricule(): ?string
{
return $this->matricule;
}
public function setMatricule(string $matricule): self
{
$this->matricule = $matricule;
return $this;
}
public function getParked(): ?bool
{
return $this->parked;
}
public function setParked(bool $parked): self
{
$this->parked = $parked;
return $this;
}
}




Да, в репозитории есть методы поиска сущностей по любым критериям. Вам понадобится что-то вроде следующего в вашем контроллере:
use App\Entity\Voiture;
...
$repository = $this->getDoctrine()->getRepository(Voiture::class);
$parkedVoitures = $repository->findBy(
['parked' => true]
);
$parkedVoituresOrderedByMatricule = $repository->findBy(
['parked' => true],
['matricule' => 'ASC']
);
https://symfony.com/doc/current/doctrine.html#fetching-objects-from-the-database
В моем случае я не использую контроллер, я использую платформу API, которая использует аннотации.
Возможно, вы ищете персонализированные аннотации, я использую API-платформу, особенно GraphQL, поэтому мне не нужны все строки, потому что у меня есть логическое удаление, а не физическое удаление. вместо того, чтобы делать бизнес-правило, а каждый разработчик интерпретирует его по-своему, мы делаем личную аннотацию.
См. этот связь, эта ссылка также применима к SF4.
Итак, я наконец нашел решение, оказывается, есть аннотация для платформы Api, которая фильтрует логические данные. Я только что добавил приведенную ниже аннотацию в свой класс, и она работала, когда я добавляю ?parked=true к своему адресу, и все работает нормально.
* @ApiFilter(BooleanFilter::class,
* properties = {
* "parked"
* }
* )
Подождите, содержание вашего вопроса говорит о получении сущностей из серверной части, но ваш заголовок говорит «POST», откуда вы отправляете данные?