2016-10-05 61 views
1

我剛開始使用dunglas api平臺。我使用v2.0.0-rc1,並添加了一個自定義操作來啓用/禁用用戶。使用自定義參數的API平臺自定義操作

這是我的用戶

<?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個參數:電子郵件,全名,用戶名,啓用。但我只想發送啓用的參數和用戶的id在路由中給出,但我不能在文檔中找到如何更改參數。

有人可以幫助我嗎?

+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不需要發送更多的參數,只是id。

希望它有幫助