API平台自定义参数的自定义操作

时间:2016-10-05 07:42:27

标签: rest api symfony api-platform.com

我刚开始使用dunglas api平台。我使用v2.0.0-rc1并添加了一个自定义操作来启用/禁用用户。

这是我对用户的自定义操作

<?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="/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,fullname,username,enabled。但我只想发送启用的参数,并在路线中给出用户的ID,但我无法在文档中找到如何更改参数。

有人可以帮我这个吗?

1 个答案:

答案 0 :(得分:2)

我试图使相同的启用/禁用,我这样做:

我在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。

希望有所帮助