PHPFixing
  • Privacy Policy
  • TOS
  • Ask Question
  • Contact Us
  • Home
  • PHP
  • Programming
  • SQL Injection
  • Web3.0

Monday, January 31, 2022

[FIXED] Create a custom route for a collection using GET method

 January 31, 2022     api-platform.com, doctrine-orm, php, symfony     No comments   

Issue

I do not manage to create a custom route for a collection, my entity is named File.

here is my Entity annotation :

/**
 * @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")
 */

The controller file

<?php

namespace App\Controller;

use App\Entity\File;

class FileStatsController
{

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

}

however i have this error when i reach /files/stats, it seems that api plaform is expecting an Id . For some reasons if i switch the method from GET to POST the route is working

{
  "@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": []
    },

Solution

I manage to find the solution , in my Controller if i remove the typed variable $data

namespace App\Controller;

class FileStatsController
{

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

}

I manage to properly retreive the data

in addition, the method get is mandatory in the ApiRessource annotations

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


Answered By - Loic H
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
Newer Post Older Post Home

0 Comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Total Pageviews

Featured Post

Why Learn PHP Programming

Why Learn PHP Programming A widely-used open source scripting language PHP is one of the most popular programming languages in the world. It...

Subscribe To

Posts
Atom
Posts
Comments
Atom
Comments

Copyright © PHPFixing