2016-10-05 11 views
1

Я только начал использовать платформу dunglas api. Im, использующий v2.0.0-rc1, и я добавил пользовательскую операцию для включения/выключения пользователя.Пользовательская операция API Platform с настраиваемым параметром

Это мое пользовательское действие для пользователя

<?php 

namespace Zoef\UserBundle\Action; 

use Zoef\UserBundle\Entity\User; 
use Doctrine\Common\Persistence\ManagerRegistry; 
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method; 
use Symfony\Component\Routing\Annotation\Route; 

class UserAction 
{ 
    /** 
    * @Route(
    *  name="enabled_user", 
    *  path="https://stackoverflow.com/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 параметра: электронная почта, FULLNAME, имя пользователя, включен. но я только хочу отправить разрешенный параметр, и идентификатор пользователя указан в маршруте, но я не могу найти в документе, как изменить параметры.

Может кто-нибудь помочь мне с этим?

+0

Вы подтверждаете ошибку? Можете ли вы опубликовать результат запроса PUT? –

+0

Вы нашли решение этого? –

ответ

1

Я пытался сделать то же самое включить/отключить, и я сделал это так:

Я создал пользовательский контроллер в AppBundle\Controller\AddressController

use Symfony\Bundle\FrameworkBundle\Controller\Controller; 

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: 'AppBundle\Entity\Address' 
      _api_item_operation_name: 'enable' 

В моей сущности у меня есть:

* @ApiResource(
*  itemOperations={ 
*   "enable"={"route_name"="address_enable"}, 
*  } 
*) 

И после этого я просто отправлю его как URL/addresses/123/enable не нужно отправлять больше параметров, просто идентификатор.

Надеюсь, это поможет