платформа api: поля $ data в методе _invoke равны нулю - PullRequest
0 голосов
/ 06 мая 2020

Я создал настраиваемый контроллер для операции PUT в объекте User, чтобы зашифровать пароль при обновлении данных пользователя.

функция _invoke:

 /**
 * @Route(
 *     path="/api/users/{id}",
 *     methods={"PUT"},
 *     defaults={"_api_resource_class"=User::class}
 * )
 * @param User $data
 * @return JsonResponse
 */
public function __invoke(User $data): JsonResponse
{
    dd($data);
    return new JsonResponse([]);
}

Пользователь объекта:

/**
* @ApiResource(
*     collectionOperations={"get"},
*     itemOperations={"get",
*     "put"={
*      "controller"=UpdateUserController::class,
*     }, "delete", "patch"}
* )
* @ORM\Entity(repositoryClass="App\Repository\UserRepository")
*/
class User implements UserInterface
{

Но когда я отправляю запрос с новыми данными, поля равны нулю, а поле createdAt имеет текущее время, это похоже на то, что он пытается создать нового пользователя вместо того, чтобы указывать его идентификатор в путь к URL-адресу

^ App\Entity\User {#6197 ▼
-id: null
-email: null
-roles: []
-password: null
-firstName: null
-lastName: null
-createdAt: DateTime @1588765411 {#6196 ▼
  date: 2020-05-06 11:43:31.115062 Atlantic/Azores (+00:00)
}

}

Есть ли правильный способ получить значения в аргументе $ data?

1 Ответ

0 голосов
/ 07 мая 2020

В вашей конфигурации маршрута отсутствует _api_item_operation_name.

Необходимо указать _api_resource_class и _api_item_operation_name (или _api_collection_operation_name для операции сбора) в параметрах маршрут (ключ по умолчанию). Это позволяет платформе API работать с системой маршрутизации Symfony.

https://api-platform.com/docs/core/controllers/#alternative -метод

...