Я пытаюсь добавить / удалить элемент из одной сущности:
У меня есть
/**
* @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,но я не знаю, как получить пользовательский ресурс, если я иду по правильному пути.
Кто-нибудь может мне помочь?
Спасибо