Создать собственный маршрут для коллекции, используя метод GET - PullRequest
0 голосов
/ 27 января 2020

Мне не удается создать собственный маршрут для коллекции, моя сущность называется File.

Вот моя аннотация Entity:

/**
 * @ApiResource(
 *
 *     normalizationContext={"groups"={"file"},"enable_max_depth"=true},
 *     denormalizationContext={"groups"={"file-write-customers"},"enable_max_depth"=true},
 *     attributes={"force_eager"=false},
 *     itemOperations={
 *           "get",
 *           "put",
 *           "get_mandate_pdf"={
 *                   "method"="POST",
 *                   "path"="/files/{id}/mandate-pdf",
 *                   "controller"=FileCreatePdfController::class,
 *                  },
 *     },
 *     collectionOperations={
 *          "stats"={
 *                   "method"="GET",
 *                   "path"="/files/stats",
 *                   "controller"=FileStatsController::class,
 *            }
 *     },
 * )
 * @ApiFilter(SearchFilter::class, properties={"status": "exact", "sponsor": "exact"})
 * @ApiFilter(DateFilter::class, properties={"updatedAt"})
 * @ORM\Entity
 * @ORM\Table(name="cases")
 */

Файл контроллера

<?php

namespace App\Controller;

use App\Entity\File;

class FileStatsController
{

    public function __invoke(File $data): File
    {
        return $data;
    }

}

однако у меня возникает эта ошибка, когда я достигаю / files / stats, кажется, что api plaform ожидает Id. По некоторым причинам, если я переключаю метод с GET на POST, маршрут работает

{
  "@context": "\/contexts\/Error",
  "@type": "hydra:Error",
  "hydra:title": "An error occurred",
  "hydra:description": "The identifier id is missing for a query of App\\Entity\\File",
  "trace": [
    {
      "namespace": "",
      "short_class": "",
      "class": "",
      "type": "",
      "function": "",
      "file": "\/srv\/api\/vendor\/doctrine\/orm\/lib\/Doctrine\/ORM\/ORMException.php",
      "line": 309,
      "args": []
    },

1 Ответ

0 голосов
/ 29 января 2020

Мне удается найти решение, в моем контроллере, если я удаляю типизированную переменную $ data

namespace App \ Controller;

class FileStatsController
{

    public function __invoke($data)
    {
        return $data;
    }

}

Мне удается правильно получить data

Кроме того, метод get является обязательным в аннотациях ApiRessource

collectionOperations={
            "get",
 *          "stats"={
 *              "method"="GET",
 *                   "path"="/stats",
 *                   "controller"=FileStatsController::class,
 *          }
 *     }
...