Число, Фильтр заказа не применяется, но применяется к SearchFilter - PullRequest
0 голосов
/ 08 января 2019

У меня есть сущность с фильтрами. Я использовал SearchFilter и все будет хорошо, но теперь я добавляю OrderFilter и NumericFilter, этот фильтр не работает. Я не нашел в документации упоминания о том, что для этих фильтров нужно что-то прописывать в конфигурации. Почему это не работа, я не знаю.

namespace App\Entity;

use ApiPlatform\Core\Annotation\ApiSubresource;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Gedmo\Mapping\Annotation as Gedmo;
use ApiPlatform\Core\Annotation\ApiFilter;
use ApiPlatform\Core\Annotation\ApiResource;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\OrderFilter;
use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\NumericFilter;

/**
 * @ORM\Entity(repositoryClass="App\Repository\ProductWatcherRepository")
 * @ORM\HasLifecycleCallbacks()
 *
 * @ApiResource(
 *     routePrefix="/profile",
 *     attributes={
 *      "normalization_context"={"groups"={"product-watcher-list"}},
 *     },
 *     itemOperations={"get"={"method"="GET"}},
 *     collectionOperations={"get"={"method"="GET"}},
 * )
 *
 * @ApiFilter(NumericFilter::class, properties={"percent"}) // NOT WORK
 * @ApiFilter(OrderFilter::class, properties={"createdAt", "title"}) // NOT WORK
 * @ApiFilter(SearchFilter::class, properties={"title": "partial"}) // WORK
 *
 * @Gedmo\SoftDeleteable(fieldName="deletedAt", timeAware=false, hardDelete=true)
 */
class ProductWatcher
{
    const STATUS_NEW = 1; // New Product Watcher

    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     * @Groups("product-watcher-list")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=255)
     * @Assert\NotBlank()
     * @Groups("product-watcher-list")
     */
    private $title = '';

    /**
     * @ORM\Column(type="integer")
     * @Assert\NotBlank()
     * @Assert\Range(
     *      min = 1,
     *      max = 99,
     *      minMessage = "v.percent.range",
     *      maxMessage = "v.percent.range"
     * )
     * @Groups("product-watcher-list")
     */
    private $percent = 0;

    /**
     * @ORM\Column(type="integer")
     * @Assert\NotBlank()
     */
    private $createdAt = 0;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="productWatchers")
     * @ORM\JoinColumn(nullable=true)
     * @Groups("product-watcher-list")
     */
    private $user;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Product", inversedBy="productWatchers")
     * @ORM\JoinColumn(nullable=true)
     * @ApiSubresource
     * @Groups("product-watcher-list")
     */
    private $product;

............

Работает только SearchFilter, остальные не работают, в чем может быть проблема, в чванстве тоже только поле для SearchFilter видно

Работа:

/api/profile/product_watchers?title=product1

Не работает:

/api/profile/product_watchers?percent=20
/api/profile/product_watchers?order[title]=desc

Я уже понятия не имею, почему это не работает. У меня нет кеша, я перезагружаю свою среду.

...