簡體   English   中英

symfony3形式,無法在buildForm方法中獲取選項

[英]symfony3 form, can't get options in buildForm method

我真的不知道該線程使用哪個標題,但是,我正在v3.1.6中開發一個Symfony項目,並在我的表單字段中使用Ajax使用select2插件。

我想使用表單組件的事件(submit和pre_set_data)進行創建和編輯,以像symfony doc的這一部分一樣動態更改字段。 一切正常,直到我提交表單並給出錯誤通知為止:未定義的變量:選項

我的表單類型代碼在這里

namespace Xxx\ArticleBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Xxx\ArtistBundle\Repository\ArtistRepository;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Ivory\CKEditorBundle\Form\Type\CKEditorType;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Doctrine\ORM\EntityManager;

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' => 'Xxx\ArticleBundle\Entity\Article',
    ));
    $resolver->setRequired('em');
}

/**
 * {@inheritdoc}
 */
public function getBlockPrefix()
{
    return 'xxx_articlebundle_article';
}
}

我也想說的目標是,當從儀表板創建帖子時,在文章中設置圖片時以及在選擇圖片時將其與Wordpress集成在一起,使其具有類似UI的界面,並且將其作為用戶標簽添加到用戶中,而無需使用objectType將會有千個,所以我選擇一個selectType與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,
    ));
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM