无法向API平台提交数据

时间:2018-02-06 01:39:46

标签: api-platform.com

我有一个控制器,通过它我可以将数据发送到api平台的本地环境(运行正常)

    /**
     * Creates a new Location entity.
     *
     */
    public function createAction(Request $request)
    {
        $this->get("suvya_breadcrumbs.factory")->update('New Hub');

        $form = $this->createForm(HubType::class);
        $form->handleRequest($request);

        $new_url = $this->generateUrl('new_hub');
        $redirect_url = $this->generateUrl('home');

        if ($form->isSubmitted() && $form->isValid()) {

            $client = new Client([
                'base_uri' => 'http://127.0.0.1:8000',
            ]);

            $response = $client->request('POST', '/hubs', [
                'form_params'=> $form->getData(),
                'headers' => [
                    'Accept'     => 'application/ld+json',
                    'Content-Type'=> 'application/json',
                    'Authorization'=> 'eyJhbGciOiJSUzI1NiJ9.eyJyb2xlcyI6WyJST0xFX1VTRVIiXSwidXNlcm5hbWUiOiJhZG1pbiIsImlhdCI6MTUxNzg3NjE1NCwiZXhwIjoxNTE3ODc5NzU0fQ.gIG9lueJJZxzkOl8qblhHWwiJvW97m4gz1-1mYeM9SgMzMW35Wh6XamOOYiISDN99yJ6Ovo-wKk6whpE5UGMDVw_wGek003Dd6r-Y7Ql3kVLHksn2JFzhAN3GwlXFcOI4MIjmq5qBhkzv21pHymO0yn1SlzWBwb0O7WygywefMu5p09zGuvAiP9I2ShyQLZhjj8bB_odf3dI-Ql0ZbRmn_JDkDoPcm5U11i-3S1oMikBmFq0WtTcWo7vezt3QdA3bY4_bgaISINAiYRR-_cvjpBSqFSE6n1ZYtHvKFn-98wXXsBGxEAoZw6iQL4iRgOI8F_uaiCo0eRHC7q0_xQ_V_W0-5XDIQXWDwoiVaUXnjO6xo2Fldp7PLO1ueJz1e4wiOy2-TunZdc8UCtw2BdFIQtWatPLi_v_rsNvF2H-6hwa9UOKEi9Z4tH4KkuATbXAxxfkCbSOyY1SAWP0riooPQi_AI2J7L2Ly86eAuKo1Hix3EuEogo19GSyBz_cCWczyERQWM9gikuUs8E22SIAdxTl8ZLFaXgiZIibDvb8pqcN8izFjywWbF2CkyWC58WxrVd6Bfmfnm7k9T6oZqwIZ-TQR-SbRnUHN1hpWUjFCk-tHhgvh7osHXmxe3grzA8M3LPBpQGQiTeqBZFMjF4Tx8zW2tuiEn6TwhV14Lj24Vc'
                ]
            ]);

            die();
        }

        return $this->render('SuvyaFabricsCloudBundle:Common:basic.html.twig', array(
            'form' => $form->createView(),
            'page_title'=> 'Hub aanmaken',
            'action_path' => $new_url,
            'cancel_path'=> $redirect_url,
            'submit_button_title'  => 'Opslaan',
        ));
    }

但遗憾的是我在api环境的dev.log中收到错误:

[2018-02-06 02:32:37] request.INFO: Matched route "api_hubs_post_collection". {"route":"api_hubs_post_collection","route_parameters":{"_controller":"api_platform.action.post_collection","_format":null,"_api_resource_class":"AppBundle\\Entity\\Hub","_api_collection_operation_name":"post","_route":"api_hubs_post_collection"},"request_uri":"http://127.0.0.1:8000/hubs","method":"POST"} []
[2018-02-06 02:32:37] request.CRITICAL: Uncaught PHP Exception Symfony\Component\Serializer\Exception\UnexpectedValueException: "Syntax error" at /Users/myname/Sites/suvyalogistics-api/vendor/symfony/symfony/src/Symfony/Component/Serializer/Encoder/JsonDecode.php line 78 {"exception":"[object] (Symfony\\Component\\Serializer\\Exception\\UnexpectedValueException(code: 0): Syntax error at /Users/myname/Sites/suvyalogistics-api/vendor/symfony/symfony/src/Symfony/Component/Serializer/Encoder/JsonDecode.php:78)"} []

form-> getData()的输出:

array (size=4)
  'postalCode' => string 'sdfdsf' (length=6)
  'streetName' => string 'sdfsdf' (length=6)
  'doorNumber' => string 'sdfsfd' (length=6)
  'city' => string 'sdfsfd' (length=6)

在api平台上运行具有相同值的端点也可以。

你们有谁知道为什么会出错?

1 个答案:

答案 0 :(得分:2)

您将以application/x-www-form-urlencoded(HTML格式)编码的有效负载发送到API平台API,而根据您设置的标头,它会排除以JSON编码的数据。< / p>

要使用JSON编码表单数据,可以使用以下Guzzle代码段:

$client = new Client([
    'base_uri' => 'http://127.0.0.1:8000',
]);

$response = $client->request('POST', '/hubs', [
    'json' => $form->getData(),
    'headers' => [
        'Accept' => 'application/ld+json',
        'Authorization'=> '...'
    ]
]);

或者,您可以configure API Platform to accept form data,但我不建议采用这种方式(仅处理JSON API方面更好)。