#rest #api #symfony #api-platform.com
#rest #API #symfony #api-platform.com
Вопрос:
Я только начал использовать платформу api dunglas. Я использую версию v2.0.0-rc1 и добавил пользовательскую операцию для включения / отключения пользователя.
Это мое пользовательское действие для пользователя
<?php
namespace ZoefUserBundleAction;
use ZoefUserBundleEntityUser;
use DoctrineCommonPersistenceManagerRegistry;
use SensioBundleFrameworkExtraBundleConfigurationMethod;
use SymfonyComponentRoutingAnnotationRoute;
class UserAction
{
/**
* @Route(
* name="enabled_user",
* path="/users/{id}/enabled",
* defaults={"_api_resource_class"=User::class, "_api_item_operation_name"="enabled"}
* )
* @Method("PUT")
*/
public function __invoke(User $user)
{
if($user->isEnabled()) {
$user->setEnabled(false);
} else {
$user->setEnabled(true);
}
return $user;
}
}
Когда я захожу в свои документы, пользовательская операция добавляется и работает, но для использования этого действия мне нужно отправить 4 параметра: email, полное имя, имя пользователя, включено. но я хочу отправить только включенный параметр, а идентификатор пользователя указан в маршруте, но я не могу найти в документе, как изменить параметры.
Может ли кто-нибудь помочь мне с этим?
Комментарии:
1. Вы получаете ошибку проверки? Можете ли вы опубликовать результат запроса PUT?
2. Вы нашли решение для этого?
Ответ №1:
Я пытался включить / отключить то же самое, и я сделал это таким образом:
Я создал пользовательский контроллер в AppBundleControllerAddressController
use SymfonyBundleFrameworkBundleControllerController;
class AddressController extends Controller
{
public function enableAction($data)
{
$data->setActive(true);
$em = $this->getDoctrine()->getManager();
$em->persist($data);
$em->flush();
return $data;
}
}
В routing.yml
моем:
address_enable:
path: '/addresses/{id}/enable'
methods: ['PUT']
defaults:
_controller: 'AppBundle:Address:enable'
_api_resource_class: 'AppBundleEntityAddress'
_api_item_operation_name: 'enable'
В моей сущности у меня есть:
* @ApiResource(
* itemOperations={
* "enable"={"route_name"="address_enable"},
* }
* )
И после этого я просто отправляю его, поскольку URL/addresses/123/enable
нет необходимости отправлять дополнительные параметры, только идентификатор.
Комментарии:
1. Этот метод не рекомендуется ApiPlatform ( api-platform.com/docs/core/controllers/#alternative-method )