Php Symfony FOSUserBundle密码重置-找不到该文件

Php Symfony FOSUserBundle密码重置-找不到该文件,php,symfony,fosuserbundle,symfony-3.3,Php,Symfony,Fosuserbundle,Symfony 3.3,我正在使用FOSUserBundle 我定义了以下特征: trait标志 { /** *@Assert\Image() *@ORM\Column(type=“string”,nullable=true) */ 私人$logo; /** *@返回混合 */ 公共函数getLogo() { 返回$this->logo; } /** *@param混合$logo */ 公共功能setLogo($logo) { $this->logo=$logo; } } 然后我将其应用于我的用户类: 使用FOS\U

我正在使用
FOSUserBundle

我定义了以下特征:

trait标志
{
/**
*@Assert\Image()
*@ORM\Column(type=“string”,nullable=true)
*/
私人$logo;
/**
*@返回混合
*/
公共函数getLogo()
{
返回$this->logo;
}
/**
*@param混合$logo
*/
公共功能setLogo($logo)
{
$this->logo=$logo;
}
}
然后我将其应用于我的用户类:

使用FOS\UserBundle\Model\User作为基本用户;
使用条令\ORM\Mapping作为ORM;
/**
*@ORM\Entity()
*@ORM\Table(name=“fos\u user”)
*/
类用户扩展了BaseUser
{
使用标识;
...
这一切都非常有效,并为能够将图像关联到我的用户提供了基础

问题是,这会中断FOS密码重置-在我提交表单后,我会收到以下消息,显示为表单错误:

找不到该文件

Symfony Profiler进一步详细说明如下:

ConstraintViolation {#1368 
  root: Form {#879 …}
  path: "data.logo"
  value: "553d1f015637bf5d97b9eb66f71e6587.jpeg"
}
这是由于logo属性上的
@Assert\Image()
造成的,仅当我尝试重置密码的帐户已关联图像时才会出现。如果记录没有图像,则不会导致任何问题

这就是我最终迷失的地方。我明白:

  • 出于某种原因,Symfony希望在这个阶段和那个阶段获得图像

  • 由于其他原因,它没有这样做

  • 我如何解决这个问题?我在这个阶段不需要图像,所以如果有办法告诉bundle这可能是理想的


    我对Symfony比较陌生,因此,如果这个问题有一个明显的答案,但我看不到,我深表歉意。

    为密码重置创建一个验证组

    之后,重写ResettingFormType并定义要使用的验证组

    这里的目标是图像的断言检查不应该在这个表单中进行,但是由于整个用户对象将作为数据注入表单本身,所以所有断言都将进行,直到表单被告知不这样做为止

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'validation_groups' => array('my_resetting'),
        ));
    }
    
    覆盖FormType的示例如下:

    # AppBundle\Form\Type\ProfileFormType.php
    class ProfileFormType extends AbstractType
    {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            # example -> disable change of username in profile_edit
            $builder
                ->add('username', TextType::class, array(
                    'disabled' => true,
                    'label' => 'form.username',
                    'translation_domain' => 'FOSUserBundle'
                ))
            ;
        }
    
        public function getParent()
        {
            return 'FOS\UserBundle\Form\Type\ProfileFormType';
        }
    
        public function getBlockPrefix()
        {
            return 'app_user_profile';
        }
    
        public function configureOptions(OptionsResolver $resolver)
        {
            $resolver->setDefaults(array(
                'validation_groups' => array('my_resetting'),
            ));
        }
    }
    
    在config.yml中

    fos_user:
        profile:
            form:
                type: AppBundle\Form\Type\ProfileFormType
    

    当您提交表单时,它将调用
    setLogo
    ,并将其设置为
    null
    。然后验证程序将查找当然不存在的图像(因为它是null)


    快速修复方法是将约束添加到表单类型而不是实体。

    在什么阶段出现此错误?加载重置表单时还是提交表单时?@KhorneHoly-在将表单作为表单错误提交后-我将更新我的问题以澄清这一点。