Подресурсы маршрутов в symfony 5 с API-платформой - PullRequest
1 голос
/ 09 июля 2020

Я пытаюсь объявить субресурс в своем приложении symfony. Я следил за API-платформой do c об этом: https://api-platform.com/docs/core/subresources/ Подресурс действительно появляется в маршрутах, но не в его родительском ресурсе.

Маршруты, которые у меня есть в настоящее время:

  api_files_get_collection                                         GET      ANY      ANY    /api/files.{_format}                                
  api_files_post_collection                                        POST     ANY      ANY    /api/files.{_format}                                
  api_files_get_item                                               GET      ANY      ANY    /api/files/{id}.{_format}                           
  api_files_patch_item                                             PATCH    ANY      ANY    /api/files/{id}.{_format}                           
  api_files_put_item                                               PUT      ANY      ANY    /api/files/{id}.{_format} 
  api_external_subscription_requests_get_collection                GET      ANY      ANY    /api/external_subscription_requests.{_format}       
  api_external_subscription_requests_post_publication_collection   POST     ANY      ANY    /api/subscribe                                      
  api_external_subscription_requests_get_item                      GET      ANY      ANY    /api/external_subscription_requests/{id}.{_format}

Маршруты, которые я хотел бы иметь:

  api_files_get_collection                                         GET      ANY      ANY    /api/files.{_format}                                
  api_files_post_collection                                        POST     ANY      ANY    /api/files.{_format}                                
  api_files_get_item                                               GET      ANY      ANY    /api/files/{id}.{_format}                           
  api_files_patch_item                                             PATCH    ANY      ANY    /api/files/{id}.{_format}                           
  api_files_put_item                                               PUT      ANY      ANY    /api/files/{id}.{_format} 
  api_files_external_subscription_requests_get_collection                GET      ANY      ANY    /api/files/{id}/external_subscription_requests.{_format}       
  api_files_external_subscription_requests_post_publication_collection   POST     ANY      ANY    /api/files/{id}/subscribe                                      
  api_files_external_subscription_requests_get_item                      GET      ANY      ANY    /api/files/{id}/external_subscription_requests/{id}.{_format}

Код в App\Entity\File.php:

/**
 * @ORM\Entity
 * @ApiResource(
 *      attributes={"order"={"createdAt": "DESC"}},
 *      collectionOperations={
 *          "get"={
 *              "normalization_context"={"groups"={"model:timestampable", "file:collection:read"}},
 *          },
 *          "post",
 *      },
 *      itemOperations={
 *          "get"={
 *              "normalization_context"={"groups"={"model:timestampable", "file:item:read"}},
 *          },
 *          "patch",
 *          "put"
 *      },
 * )
 */
class File
{
    // ...

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\ExternalSubscriptionRequest", cascade={"all"}, mappedBy="file")
     * @Groups({
     *     "file:collection:read",
     *     "file:item:read"
     * })
     * @ApiSubresource()
     */
    private $external_subscription_requests;

    // ...
}

Код в App\Entity\ExternalSubscriptionRequest.php:

/**
 * @ORM\Entity
 * @ApiResource(
 *     collectionOperations={
 *         "get",
 *         "post_publication"={
 *             "method"="POST",
 *                 "path"="/subscribe",
 *                 "controller"=SubscribeToConso::class,
 *             }
 *     },
 *     itemOperations={
 *         "get",
 *     },
 * )
 */
class ExternalSubscriptionRequest
{
    // ...

    /**
     * @var File the file this request was made for
     *
     * @ORM\ManyToOne(targetEntity="App\Entity\File", inversedBy="external_subscription_requests")
     * @ORM\JoinColumn(referencedColumnName="id", nullable=false)
     *
     * @Groups({
     *     "external_subscription_request:collection:read",
     *     "external_subscription_request:item:read"
     * })
     */
    public $file;

    // ...

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...