Надеюсь, я прав, спросив это.Я рассмотрел (почти) все подобные проблемы, но я еще не удовлетворен.
Я работаю над сущностью пользователя и уже несколько дней (даже недель) пытаюсь отправить пользователя с помощьюиндивидуальное тело.Вот часть моей сущности Пользователь:
/**
* @ApiResource(
* normalizationContext={"groups"={"read"}},
* denormalizationContext={"groups"={"write"}},
* itemOperations={
* "get",
* "put",
* "delete",
* "get_active_user"={
* "method"="GET",
* "path"="/users/active/me",
* "controller"=UserReadAction::class,
* "defaults"={"_api_receive"=false},
* "swagger_context"={
* "parameters"={
*
* }
* }
* },
* },
* collectionOperations={
* "change_password"={
* "method"="POST",
* "path"="/users/active/changepassword",
* "controller"=UserChangePasswordAction::class,
* "normalization_context"={"groups"={"afup"}},
* "defaults"={"_api_receive"=false},
* "swagger_context"={
* "summary" = "Change user password",
* "parameters"={
* {
* "name" = "User",
* "in" = "body",
* "schema" = {
* "type" = "object",
* "properties" = {
* "password" = {"type"="string"},
* "nom" = {"type"="string"},
* }
* },
* "required" = "true",
* }
* },
* }
* }
* }
* )
* @ORM\Entity(repositoryClass="App\Repository\UserRepository")
* @ORM\Table(name="users")
*/
class User implements UserInterface
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
* @Groups({"read", "write", "afup"})
*/
private $id;
Вот контроллер:
namespace App\Controller\SDK;
use App\Entity\User;
use App\Service\SDK\UserService;
use Symfony\Component\Security\Core\Security;
class UserChangePasswordAction
{
public function __invoke(User $data)
{
var_dump($data);die;
}
}
И файл services.yaml (некоторая часть)
services:
# default configuration for services in *this* file
_defaults:
autowire: true # Automatically injects dependencies in your services.
autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
public: false # Allows optimizing the container by removing unused services; this also means
# fetching services directly from the container via $container->get() won't work.
# The best practice is to be explicit about your dependencies anyway.
# makes classes in src/ available to be used as services
# this creates a service per class whose id is the fully-qualified class name
App\:
resource: '../src/*'
exclude: '../src/{DependencyInjection,Entity,Migrations,Tests,Kernel.php}'
# controllers are imported separately to make sure services can be injected
# as action arguments even if you don't extend any base controller class
App\Controller\:
resource: '../src/Controller/*'
tags: ['controller.service_arguments']
Когда я пытаюсь это сделать (см. Var_dump в контроллере), я получаю сообщение об ошибке:
Невозможно автоматически передать аргумент $ data для "App \ Controller \ SDK \ UserChangePasswordAction ()": он ссылается на класс "App \Entity \ User "такой службы не существует
Я прочитал официальный документ, и кажется, что метод _invoke должен автоматически получить объект.Но это не работает для меня.
Примечание: я также определил пользовательскую операцию элемента "get_active_user", и она отлично работает.
Пожалуйста, я хотел бы понять:
- что я сделал не так,
- как это на самом деле работает,
Спасибо.
РЕДАКТИРОВАТЬ: В определении collectionOperation я удалил следующую настройку, котораяозначает, что мы вручную хотим обработать извлечение данных (пользователя):
- "defaults" = {"_ api_receive" = false},
сейчасконтроллер возвращает пустую сущность пользователя, а не ошибку.Я все еще не могу получить отправленные данные.