1

Workaround:现在从表单到文本的 cnhanging 表单父级做到了。

我刚刚创建了一个自定义字段类型,其父项是表单。

有谁知道我怎样才能获得正确的property_path?我的意思是,在 MyFieldType 中,我想访问使用 my_field_type 字段的 MyFormType 的属性,这样我就可以动态地设置正确的 property_path。

这是我的自定义字段类型。在下面的类中,想要动态地设置ColorPaletteField用作 property_path 值的 Form Type 属性。


    命名空间 WE\BobbyWebAppBundle\Form\Field;

    使用 Symfony\Component\Form\AbstractType;
    使用 Symfony\Component\Form\FormView;
    使用 Symfony\Component\Form\FormInterface;
    使用 Symfony\Component\OptionsResolver\OptionsResolverInterface;
    使用 Symfony\Component\PropertyAccess\PropertyAccess;
    使用 Symfony\Component\Form\FormBuilderInterface;
    使用 Symfony\Component\Form\Extension\Core\EventListener\TrimListener;

    类 ColorPaletteField 扩展 AbstractType
    {
        公共函数 setDefaultOptions( OptionsResolverInterface $resolver )
        {
            $resolver->setDefaults(数组(
                    '映射' => 真,
                    'error_bubbling' => 假,
                    '颜色' => 数组()
                )
            );
        }

        /**
         * 将帮助传递给视图
         *
         * @param 表单视图 $view
         * @param FormInterface $form
         * @param 数组 $options
         */
        公共函数 buildView(FormView $view, FormInterface $form, array $options)
        {
            $parentData = $form->getParent()->getData();

            如果(空!== $parentData)
            {
                $accessor = PropertyAccess::getPropertyAccessor();
                $defaultColor = $accessor->getValue( $parentData, 'calendar_color' );
            }
            否则 { $defaultColor = null; }

            if(array_key_exists('colors', $options))
            {
                $colors = $options['colors'];
            }
            否则 { $colors = array(); }

            $view->vars['colors'] = $colors;
            $view->vars['defaultColor'] = $defaultColor;
        }

        公共函数 getParent()
        {
            返回“表格”;
        }

        公共函数 getName()
        {
            返回“颜色调色板”;
        }
    }

先谢谢了,

4

1 回答 1

0

您可以在选项中传递它。首先在您的自定义字段中设置默认值

$resolver->setDefaults(array(
    'mapped'            => true,
    'error_bubbling'    => false,
    'colors'            => array()
    'property_name'     => 'calendar_color'
)); 

然后将此字段添加到表单并在选项中定义属性名称

->add('some_name', 'color_palette', array('property_name' => 'some_name'));
于 2013-07-24T15:34:07.387 回答