【问题标题】:Expected argument of type "string or Symfony\Component\Form\FormTypeInterface"“字符串或 Symfony\Component\Form\FormTypeInterface”类型的预期参数
【发布时间】:2015-06-09 11:01:22
【问题描述】:

symfony中出现的错误如下:

给定“字符串或 Symfony\Component\Form\FormTypeInterface”、“Proyecto\LavocBundle\Entity\Datos”类型的预期参数

我不会把所有的代码都放这么大的,我觉得问题出在类型上:

DatosType:

    <?php

namespace Proyecto\LavocBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;

class DatosType extends AbstractType {

    public function buildForm(FormBuilderInterface $builder, array $options) 
    {
        $builder->add('empresa');
        $builder->add('cuit');
        $builder->add('localidad');
        $builder->add('calle');
        $builder->add('altura');
        $builder->add('areaTel');
        $builder->add('telefono');
        $builder->add('areaCel');
        $builder->add('celular');
        $builder->add('email');
    }

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

}

用户类型:

    <?php

namespace Proyecto\LavocBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;

class UserType extends AbstractType 
{
    public function buildForm(FormBuilderInterface $builder, array $options) 
    {
        $builder->add('usuario');
        $builder->add('pass');
    }

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

RegistroUsuarioType(这是嵌入的表单):

<?php

namespace Proyecto\LavocBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Proyecto\LavocBundle\Entity\Datos;



class RegistroUsuarioType extends AbstractType 
{
    public function buildForm(FormBuilderInterface $builder, array $options) {
        parent::buildForm($builder, $options);

        $builder->add('usuario', 'text');
        $builder->add('pass', 'text');
        $builder->add('datos', new Datos());
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Proyecto\LavocBundle\Entity\User'
        ));
    }

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

表格控制器:

public function crearUsuarioDatosAction()
    {
        $request = $this->getRequest();
        $usuario = new User();
        $datos = new Datos();
        $usuario->setDatos($datos);

        $form = $this->createForm(new RegistroUsuarioType(), $usuario);


        if($request->getMethod() == 'POST')
            {
                        $form->bind($request);


                if( $form->isValid() )
                    {
                        $em = $this->getDoctrine()->getEntityManager();
                        $em->persist($form);
                        $em->flush();

                    return $this->redirect($this->generateUrl('home'));

                    }



            }

            return $this->render('AtajoBundle:IngresarValores:crearUsuarioDatos.html.twig', array('form' => $form->createView()));

    }

非常感谢大家的帮助

【问题讨论】:

    标签: php forms symfony


    【解决方案1】:
        $builder->add('datos', new Datos());
    

    应该是

        $builder->add('datos', new DatosType());
    

    您的 DatosType 也需要 data_class 属性集,将此函数添加到您的 DatosType 类:

    public function setDefaultOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Proyecto\LavocBundle\Entity\Datos',
        ));
    }
    

    对于较新版本的 Symfony2 configureOptions 而不是 setDefaultOptions

    确保您的 DatosType 具有:

    use Symfony\Component\OptionsResolver\OptionsResolverInterface;
    

    【讨论】:

    • 谢谢,我还没有给帐户。但是现在又出现了另一个错误:表单的视图数据应该是标量、数组或\ArrayAccess 的实例,但却是Proyecto\LavocBundle\Entity\Datos 类的实例。您可以通过将“data_class”选项设置为“Proyecto\LavocBundle\Entity\Datos”或添加将 Proyecto\LavocBundle\Entity\Datos 类的实例转换为标量、数组或 \ 的实例的视图转换器来避免此错误数组访问。
    • FatalErrorException:编译错误:Proyecto\LavocBundle\Form\DatosType::setDefaultOptions() 的声明必须与 Symfony\Component\Form\FormTypeInterface::setDefaultOptions(Symfony\Component\OptionsResolver\OptionsResolverInterface $ 兼容解析器)在 C:\xampp\htdocs\Lavoc\src\Proyecto\LavocBundle\Form\DatosType.php 第 36 行。如果我不高兴,请原谅我,我做了你告诉我的,并且发生了一个新错误
    • 没问题,将configureOptions更改为setDefaultOptions,并确保您的DatosType中有我提到的use语句。阅读表单文档,它包含您需要对表单进行更多操作的大部分信息。 symfony.com/doc/current/book/forms.html
    猜你喜欢
    • 2015-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-19
    • 2020-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多