【问题标题】:Api platform custom action form submission failApi平台自定义动作表单提交失败
【发布时间】:2020-01-06 04:09:48
【问题描述】:

我在 ApiPlatform 中的自定义操作有问题。在任何情况下我都无法提交表单。我不知道我做错了什么。

我正在使用 Postman (https://www.getpostman.com/) 来测试 api。我尝试了所有方法:application/x-www-form-urlencoded、form-data、raw (application/json)。我还更改了 GET 方法的路由和必要设置,并尝试在查询字符串中发送参数“状态”。

ApiPlatform 标准发布操作正在运行,所以我认为这不包括服务器配置。

API 平台配置:

api_platform:
    formats:
        json: { mime_types: [ "application/json" ] }
        jsonld: { mime_types: [ "application/ld+json" ] }
        form: { mime_types: [ "application/x-www-form-urlencoded" ] }
    mapping:
        paths: ['%kernel.project_dir%/src/Entity']

Nelmio cors 配置:

nelmio_cors:
    defaults:
        origin_regex: true
        allow_origin: ['%env(CORS_ALLOW_ORIGIN)%']
        allow_methods: ['GET', 'OPTIONS', 'POST', 'PUT', 'PATCH', 'DELETE']
        allow_headers: ['Content-Type', 'Authorization']
        expose_headers: ['Link']
        max_age: 3600
    paths:
        '^/': null

ApiResource 实体配置:

 * @ApiResource(
 *     collectionOperations={
 *         "get",
 *         "post"={
 *             "method"="POST",
 *             "path"="/assets",
 *             "controller"=UploadAssetAction::class,
 *             "defaults"={"_api_receive"=false},
 *         }
 *     }
 * )

我的自定义操作动作:

namespace App\Controller;

use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormFactoryInterface;
use Symfony\Component\HttpFoundation\Request;

class UploadAssetAction
{
    /** @var FormFactoryInterface */
    private $formFactory;

    public function __construct(FormFactoryInterface $formFactory)
    {
        $this->formFactory = $formFactory;
    }

    public function __invoke(Request $request)
    {

        /**
         * State parameter is in request stack.
         */
        var_dump($request);

        $form = $this->formFactory->createBuilder()
            ->add('state', TextType::class)
            ->getForm();

        $form->handleRequest($request);

        if ($form->isSubmitted()) {
            die('Form submitted');
        }

        die('No form submission');
    }
}

我也尝试过自定义表单类。

结果始终是整个请求的 var_dump 和最后的“无表单提交”。

【问题讨论】:

    标签: php forms symfony4 api-platform.com submission


    【解决方案1】:

    也许试试这个(如果是 json):

    public function __invoke(Request $request)
    {
        [...]
    
        $form->handleRequest(json_decode($request->getContent(), true));
    
        [...]
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-28
      • 1970-01-01
      • 2014-09-18
      • 2021-01-11
      • 1970-01-01
      • 2014-09-12
      • 1970-01-01
      相关资源
      最近更新 更多