api plateform, исправить преобразователь iri - PullRequest
0 голосов
/ 02 августа 2020

Я ищу подход, чтобы узнать, получить ресурс, не зависящий от его id, а что-то вроде username, GET /api/user/{username}.

Итак, я сделал что-то вроде этого:

/**
* @ApiRessource({
*     itemOperations={
*         "get"={
*             "normalization_context"={"groups"={"user:read"}},
*             "path"="/user/{username}", "read"=false,
*             "controller"=ApiUser::class,
*             "openapi_context"={
*                  "summary" = "Récupérer un freehelper en particulier par son nom"
*              },
*          },
})
*/
class User{
{
    /**
     * @Groups({"user:read"})
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     * @ApiProperty(identifier=false)
     */
    private $id;

    /**
     * @Groups({"user:read"})
     * @ORM\Column(type="string", length=56, unique=true)
     * @ApiProperty(identifier=true)
     */
    private $username;
....
}

и затем я пишу и dataproider как описано здесь , поэтому я получил эту ошибку

"detail": "Unable to generate an IRI for \"App\\Entity\\User\".",

Можете ли вы помочь мне понять, как это сделать?

1 Ответ

0 голосов
/ 02 августа 2020

Вы можете создать такую ​​функцию в контроллере ApiUser:

/**
 * @Route("/user/{username}", name="api_user_username", methods={"GET"})
 */
public function getByUsername($username)
{
    $event = $this->em->getRepository(User::class)
                ->findOneBy(["username" => $username));

    return $this->httpKernel
                ->handle($subRequest, HttpKernelInterface::SUB_REQUEST, false);
}
 
...