Добавить / удалить элементы из отношений ManyToMany с платформой Api - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь добавить / удалить элемент из одной сущности:

У меня есть

   /**
     * @ApiResource(
     *     attributes={
     *     "order"={"createdAt": "ASC"},
     *     "pagination_client_partial"=true,
     *     "access_control"="is_granted('ROLE_USER')"
     *     },
     *     normalizationContext={"groups"={"channel:read"}},
     *     denormalizationContext={"groups"={"channel:write"}},
     *     collectionOperations={
     *         "api_channels_messages_get_subresource"={"maximum_items_per_page"=50},
     *         "post"
     *     },
     *
     *     itemOperations={
     *          "get",
     *          "api_channels_users_delete_subresource" = {
     *              "swagger_context" = {
     *                  "summary" = "Elimina a un usuario de un canal",
     *                  "parameters" = {
     *                      {
     *                          "name" = "id",
     *                          "in" = "path",
     *                          "required" = "true",
     *                          "type" = "string"
     *                      },
     *                      {
     *                          "name" = "userId",
     *                          "in" = "path",
     *                          "required" = "true",
     *                          "type" = "string"
     *                      }
     *                  }
     *              },
     *              "method"="DELETE",
     *              "path" = "/channels/{id}/users/{userId}",
     *              "controller"="App\Controller\RemoveUserFromChannel",
     *              "_api_receive"=false
     *          }
     *     }
     * )
     * @ORM\Entity(repositoryClass="App\Repository\ChannelRepository")
     */
    class Channel
    {
    ...
        /**
         * @ORM\ManyToMany(targetEntity="App\Entity\User", inversedBy="channels")
         * @Groups({"channel:read", "channel:write"})
         * @ApiSubresource()
         */
        private $users;

         /**
         * @return Collection|User[]
         */
        public function getUsers(): Collection
        {
            return $this->users;
        }

        public function addUser(User $user): self
        {
            if (!$this->users->contains($user)) {
                $this->users[] = $user;
            }

            return $this;
        }

        public function removeUser(User $user): self
        {
            if ($this->users->contains($user)) {
                $this->users->removeElement($user);
            }

            return $this;
        }
    ...
    }

Я хотел бы использовать два ресурса с методами PUT / DELETE, каждый из которых выглядит следующим образом:

/ api / channel / {channelId} / users / {userId}

Я пробовал с пользовательскими операциями:

<?php

namespace App\Controller;

use App\Entity\Channel;
use App\Services\RemoveUserFromChannelHandler;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use App\Entity\User;

class RemoveUserFromChannel extends AbstractController
{
    private $removeUserFromChannelHandler;
    public function __construct(RemoveUserFromChannelHandler $remove_user_from_channel_handler) {
        $this->removeUserFromChannelHandler = $remove_user_from_channel_handler;
    }

    public function __invoke(Channel $data): Channel
    {
        $user = /* ????? */ '';
        $this->removeUserFromChannelHandler->removeUserFromChannel($user, $data);
        $logguedUser = $this->getUser();
        return $data;
    }
}

Но здесь я получаю только Channel,но я не знаю, как получить пользовательский ресурс, если я иду по правильному пути.

Кто-нибудь может мне помочь?

Спасибо

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