php - Symfony2 通过 REST API 发布文件

标签 php rest symfony file-upload

我正在使用 Symfony2、FOSRestBundle 和 JMSSerializerBundle 构建 REST api。 我有一个用于更改用户头像的 URL。

/api/users/{id}/avatar.json

我想向该 URL 发送图像以修改头像,但收到此错误

"The form's view data is expected to be an instance of class Symfony\Component\HttpFoundation\File\File, but is  a(n) string

这是我的表单类型

class ChangeAvatarFormType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('picture', 'file')
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'AppBundle\Entity\User',
            'csrf_protection' => false,
        ));
    }

    // BC for SF < 2.7
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $this->configureOptions($resolver);
    }

    public function getName()
    {
        return 'api_user_change_avatar';
    }
}

这是我的 Controller

    /**
     * @Rest\Put("/{id}/avatar", requirements={"id" = "\d+"})
     * @Security("has_role('ROLE_CONTRIBUTOR')")
     * @Rest\View
     */
    public function putUserAvatarAction(Request $request, $id)
    {
        $userManager = $this->get('fos_user.user_manager');
        $user = $userManager->findUserBy(array('id' => $id));

        $form = $this->createForm(new ChangeAvatarFormType(), $user, array('method' => 'PUT'));
        $form->handleRequest($request);

        if ($form->isValid()) {

            $userManager->updateUser($user);

            return new Response('', 204);
        } else {
            return $this->view($form, 400);
        }
    }

这是我的 POSTMAN 配置: enter image description here

我也尝试过使用 POST 方法,而不是 PUT。 文件被发送到服务器,当我 var_dump $_FILES 时出现 我不明白为什么绑定(bind)没有按预期工作。

最佳答案

你的$user->getPicture()不是返回一个字符串吗?
在创建表单时传递数据时,它将尝试设置默认值,但 FileType 表单字段仅接受 File 对象。

关于php - Symfony2 通过 REST API 发布文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30752506/

相关文章:

java - OData v3 和 OData v4 之间的区别

java - 如何正确向Spring Restful WebService提交特殊字符?

php - 了解盐是如何在 bcrypt password_hash 中生成/使用的

database - 如何以编程方式更改 symfony2-doctrine 中的表前缀

php - 在 Symfony (2.3) 中,路由注释中的等号和冒号有什么区别吗?

php - 搜索在 yii2 中不起作用

php - Laravel:如何将参数传递到我的 View 并在 Form::text 和 Form::date 中显示它们?

php - Codeigniter 中的路由 - 找不到 404 页面

php - 我的应用程序正在向服务器发送 XML 文件 : need some guidance on writing a PHP script to parse the XML file

C# .net 将 POST 请求的内容写入 PDF 生成空白 PDF