【问题标题】:Get a JSON of my FormType schema获取我的 FormType 架构的 JSON
【发布时间】:2017-08-31 16:35:51
【问题描述】:

我正在尝试使用 liformliform-bundle 在我的控制器中生成我的表单类型的 JSON,但出现错误:

CRITICAL - 未捕获的 PHP 异常 Symfony\Component\Debug\Exception\UndefinedMethodException:“试图调用类“Symfony\Component\Form\Extension\DataCollector\Proxy\ResolvedTypeDataCollectorProxy”的未定义方法,名为“getBlockPrefix”。”在 /home/admin/Documents/displayce/code/vendor/limenius/liform/src/Limenius/Liform/FormUtil.php 第 39 行

我的控制器中的代码:

$form = $this->createForm(new FormType(), $entity, array(
        'method' => 'PUT',
        'csrf_protection' => false, 
    ));
$schema = json_encode($this->get('liform')->transform($form));

我的表单类型代码:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder

        ->add('startDate', 'date', array(
            'label' => 'Start Date',
            'required' => false,
            'widget' => 'single_text',
            'format' => 'dd/MM/yyyy',
            'input' => 'datetime',
        ))
        ->add('endDate', 'date', array(
            'label' => 'End Date (included)',
            'required' => false,
            'widget' => 'single_text',
            'format' => 'dd/MM/yyyy',
            'input' => 'datetime',
        ))
        ->add('name', 'text', array(
            'label' => 'Name',
            'max_length' => 255,
        ))
        ->add('budget', 'money', array(
            'label' => 'Budget (target)',
            'required' => true,
            'scale' => 0, // not showing decimals
        ))
        ->add('target', 'targeting', array(
            'cascade_validation' => true,
        ));
}

和定位类型:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('contexts', 'entity', array(
            'label' => 'Context(s)',
            'class' => 'AppBundle\Entity\Context',
            'choice_label' => 'name',
            'expanded' => false,
            'multiple' => true,
            'required' => false,
        ))
        ->add('contextDetails', 'entity', array(
            'label' => 'Detailed Context(s)',
            'class' => 'AppBundle\Entity\ContextDetail',
            'choice_label' => 'name',
            'group_by' => 'context.name',
            'expanded' => false,
            'multiple' => true,
            'required' => false,
        ))
        ->add('dataVariables', 'entity', array(
            'label' => 'Variable',
            'class' => 'AppBundle\Entity\DataVariable',
            'choice_label' => 'name',
            'expanded' => false,
            'multiple' => true,
            'group_by' => function($dataVariable, $key, $index) {
                return $dataVariable->getDataProvider()->getName();
            }
        ))

        // Include criteria
        ->add('region', 'choice', array(
            'label' => 'Region(s)',
            'choices' => RegionDepartment::$regions,
            'expanded' => false,
            'multiple' => true,
            'required' => false,
        ))
        ->add('department', 'choice', array(
            'label' => 'Department(s)',
            'choices' => RegionDepartment::$departments,
            'expanded' => false,
            'multiple' => true,
            'required' => false,
        ))
    ;

可能是因为我使用了嵌套的表单类型?

我的目标是将 symfony FormType 与 React 组件结合起来,只要你能将我重定向到一个解决方案来做到这一点,我会很高兴。

【问题讨论】:

    标签: php json symfony


    【解决方案1】:

    将 getBlockPrefix 添加到您的 formType 和定位类型,如下所示:

    public function getBlockPrefix()
    {
       return 'name of your form type';
    }
    

    【讨论】:

    • “试图调用类“Symfony\Component\Form\Form”的名为“getBlockPrefix”的未定义方法。”我没有Form.php中的函数所以我无法访问它
    • 我正在使用 symfony 2.7,这是我将在更新版本中使用的功能还是在旧版本中使用的功能?
    【解决方案2】:

    我将捆绑包更改为 ->getBlockPrefix 为 ->getName() 因为第一个不在 Symfony 2.7 中的 Form.php 中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-25
      • 2010-09-15
      • 1970-01-01
      • 1970-01-01
      • 2016-09-09
      • 2013-09-15
      相关资源
      最近更新 更多