当前位置:  开发笔记 > 编程语言 > 正文

在表单中添加一个ImageType:"无法读取索引...没有实现\ ArrayAccess"?

如何解决《在表单中添加一个ImageType:"无法读取索引没有实现\ArrayAccess"?》经验,为你挑选了1个好方法。

我在表单的字段中有一个自定义类型的小问题:我正在尝试添加与"图像"实体相关的"ImageType",其中"url"和"alt"作为变量.
我收到此错误:

无法从"Proxies__CG __\OC\PlatformBundle\Entity\Image"类型的对象读取索引"url",因为它没有实现\ ArrayAccess.

这是类型:

add('url', TextType::class)
      ->add('alt', TextType::class)
    ;
  }

  public function setDefaultOptions(OptionsResolverInterface $resolver)
  {
    $resolver->setDefaults(array(
      'data_class' => 'OC\PlatformBundle\Entity\Image'
    ));
  }

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

表格:

class AdvertType extends AbstractType
{
  public function buildForm(FormBuilderInterface $builder, array $options)
  {
    $builder
      ->add('title', TextType::class)
      ->add('date', DateType::class)
      ->add('categories', EntityType::class, array(
            'class'    => 'OCPlatformBundle:Category',
            'choice_label' => 'name',
            'multiple' => true
          ))
      ->add('image', ImageType::class)
      ->add('save', SubmitType::class, array('label' => 'Create Task'))    ;
  }

而实体:

id;
    }

    /**
     * Set url
     *
     * @param string $url
     *
     * @return Image
     */
    public function setUrl($url)
    {
        $this->url = $url;

        return $this;
    }

    /**
     * Get url
     *
     * @return string
     */
    public function getUrl()
    {
        return $this->url;
    }

    /**
     * Set alt
     *
     * @param string $alt
     *
     * @return Image
     */
    public function setAlt($alt)
    {
        $this->alt = $alt;

        return $this;
    }

    /**
     * Get alt
     *
     * @return string
     */
    public function getAlt()
    {
        return $this->alt;
    }
}

我在Image类中没有任何数组,所以我不确定是什么引发了这个问题.



1> Jason Roman..:

您收到此错误是因为Symfony正在查找表单类型的数据类但找不到它.您的代码适用于Symfony 2.x版本,其中setDefaultOptions()有效.从Symfony 2.7开始,该方法在3.0中被弃用configureOptions()并完全删除.

因此,您的函数存在于您的表单类中,但它永远不会被Symfony引用.您的调试工具栏甚至可能不会显示此弃用,因为它已在3.0中完全删除.如果你犯同样的错误,更简单的表单类型可能不会出错,但setDefaultOptions()在任何一种情况下都不会被调用,所以我会检查你的其他表单以确保它们也有效.

作为解决方案,改变这个:

use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class AdvertType extends AbstractType
{
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'OC\PlatformBundle\Entity\Image',
        ));
    }
}

对此:

use Symfony\Component\OptionsResolver\OptionsResolver;

class AdvertType extends AbstractType
{
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'OC\PlatformBundle\Entity\Image',
        ));
    }
}

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有