symfony3 表单,无法在构建表单方法中获取选项



我真的不知道要提供该线程的标题,但是,我正在v3.1.6中的Symfony项目,并使用Ajax的"我表单"字段中的Select2插件使用。

我想使用表单组件的事件(提交和pre_set_data(来创建和编辑以动态更改字段,就像Symfony Doc的此部分一样。一切正常工作,直到我提交表格并给出错误通知:不确定的变量:options

我的表单类型代码在这里

namespace XxxArticleBundleForm;
use SymfonyComponentFormAbstractType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentOptionsResolverOptionsResolver;
use XxxArtistBundleRepositoryArtistRepository;
use SymfonyComponentFormExtensionCoreTypeTextType;
use SymfonyComponentFormExtensionCoreTypeChoiceType;
use SymfonyBridgeDoctrineFormTypeEntityType;
use IvoryCKEditorBundleFormTypeCKEditorType;
use SymfonyComponentFormFormInterface;
use SymfonyComponentFormFormEvent;
use SymfonyComponentFormFormEvents;
use DoctrineORMEntityManager;
class ArticleType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
    //$em = $options['em']; //this give me same error

        $builder
        ->add('artist', EntityType::class, array(
            'class' => 'XxxArtistBundle:Artist',
            'choice_label' => 'artist_name',
            'multiple' => false,
            'expanded' => false))
        ->add('title', TextType::class)
        ->add('categories', EntityType::class, array(
            'class' => 'XxxArticleBundle:Category',
            'choice_label' => 'name',
            'multiple' => true,
            'expanded' => true))
        ->add('image', ChoiceType::class, array(
            'expanded' => false,
            'multiple' => false))
        ->add('intro', CKEditorType::class)
        ->add('content', CKEditorType::class);
    $formModifier = function (FormInterface $form, $image) {
        $listImages = $options['em']->getRepository('XxxAppBundle:Image')->find($image)); //this line give me the error
        if (!$listImages) {
            return; //i will add a FormError in the field
        }
        $listImages = array();
        die(var_dump($listImages));
        $form->add('image', EntityType::class, array(
            'class'       => 'XxxAppBundle:Image',
            'choices'     => $listImages,
        ));
    };
    $builder->get('image')->addEventListener(
        FormEvents::POST_SUBMIT,
        function (FormEvent $event) use ($formModifier) {
            $image = $event->getForm()->getData();
            //die(var_dump($image)); //select2 field, returned null (but it's not the question
            //die(var_dump($options)); returned error 500 Notice: Undefined variable: options
            $formModifier($event->getForm()->getParent(), $image);
        }
    );
}
/**
 * {@inheritdoc}
 */
public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'XxxArticleBundleEntityArticle',
    ));
    $resolver->setRequired('em');
}
/**
 * {@inheritdoc}
 */
public function getBlockPrefix()
{
    return 'xxx_articlebundle_article';
}
}

,我还想说,目的是从仪表板创建帖子时具有类似的ui,以在文章中设置图像,并且选择映像时,将其扔到标签中,没有用户EntityType是因为它会有一千个,所以我选择一个与Select2插件一起使用的选择性型

提前帮助

当您使用闭合内的父范围的变量时,应将其传递给'使用'语言构造。

$formModifier = function (FormInterface $form, $image) use ($options) {
    $listImages = $options['em']->getRepository('XxxAppBundle:Image')->find($image)); //this line give me the error
    if (!$listImages) {
        return; //i will add a FormError in the field
    }
    $listImages = array();
    die(var_dump($listImages));
    $form->add('image', EntityType::class, array(
        'class'       => 'XxxAppBundle:Image',
        'choices'     => $listImages,
    ));
};

最新更新