Doctrine / symfony2类的对象无法转换为字符串

时间:2012-07-04 22:24:57

标签: php symfony doctrine doctrine-orm

我在Symfony 2中的项目有问题我收到此错误

Catchable Fatal Error: Object of class Nicearma\MemesBundle\Entity\Usuario could not be converted to string in C:\wamp\www\24memes\vendor\doctrine-dbal\lib\Doctrine\DBAL\Statement.php line 131

问题是,我试图从UsuarioInfo类做一个表单,并且这个类有一个对象Usuario,表单工作正常,但是发送信息我得到了消息 我没有找到解决方案,任何人都知道如何解决这个问题? 我有这个文件

registro.html.twig

<div class="usuario">
{{ form_row(form.usuario) }}
</div>
{{ form_rest(form) }}

Usuario.php

namespace Nicearma\MemesBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * Nicearma\MemesBundle\Entity\Usuario
 *
 * @ORM\Table(name="usuario")
 * @ORM\Entity(repositoryClass="Nicearma\MemesBundle\Repository\Usuario")
 */
class Usuario implements UserInterface
{
    /**
     * @var integer $id
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string $nombre
     * @Assert\Type(type="String") 
     * @Assert\MaxLength(255)
     * @Assert\NotBlank
     * @ORM\Column(name="nombre", type="string", length=255, nullable=false)
     */
    private $nombre;

     /**
     * @var string $clave
     * @Assert\NotBlank
     * @Assert\Type(type="String")
     * @Assert\MaxLength(255)
     * @ORM\Column(name="clave", type="string", length=255, nullable=false)
     */
    private $clave;

    /**
     * @var integer $punto
     *
     * @ORM\Column(name="punto", type="integer", nullable=false)
     */
    private $punto;

    /**
     * @var UsuarioEstado
     *
     * @ORM\ManyToOne(targetEntity="UsuarioEstado")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="id_usuario_estado", referencedColumnName="id")
     * })
     */
    private $UsuarioEstado;

     /**
     * @var IdUsuarioEstado
     * @ORM\Column(name="id_usuario_estado", type="integer", nullable=false)
     * })
     */
    private $idUsuarioEstado;

    /**
     * @var UsuarioTipo
     *
     * @ORM\ManyToOne(targetEntity="UsuarioTipo")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="id_usuario_tipo", referencedColumnName="id")
     * })
     */
    private $UsuarioTipo;

   /**
     * @var idUsuarioTipo
     * @ORM\Column(name="id_usuario_tipo", type="integer", nullable=false)
     */

    private $idUsuarioTipo;

    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set nombre
     *
     * @param string $nombre
     */
    public function setNombre($nombre)
    {
        $this->nombre = $nombre;
    }

    /**
     * Get nombre
     *
     * @return string 
     */
    public function getNombre()
    {
        return $this->nombre;
    }

    /**
     * Set punto
     *
     * @param integer $punto
     */
    public function setPunto($punto)
    {
        $this->punto = $punto;
    }

    /**
     * Get punto
     *
     * @return integer 
     */
    public function getPunto()
    {
        return $this->punto;
    }

    /**
     * Set UsuarioEstado
     *
     * @param Nicearma\MemesBundle\Entity\UsuarioEstado $idUsuarioEstado
     */
    public function setUsuarioEstado(\Nicearma\MemesBundle\Entity\UsuarioEstado $UsuarioEstado)
    {
        $this->UsuarioEstado = $UsuarioEstado;
    }

    /**
     * Get UsuarioEstado
     *
     * @return Nicearma\MemesBundle\Entity\UsuarioEstado 
     */
    public function getUsuarioEstado()
    {
        return $this->UsuarioEstado;
    }
     /**
     * Set idUsuarioEstado
     *
     * @param integer $idUsuarioEstado
     */
    public function setIdUsuarioEstado( $idUsuarioEstado)
    {
        $this->idUsuarioEstado = $idUsuarioEstado;
    }

    /**
     * Get idUsuarioEstado
     *
     * @return integer
     */
    public function getIdUsuarioEstado()
    {
        return $this->idUsuarioEstado;
    }

    /**
     * Set UsuarioTipo
     *
     * @param Nicearma\MemesBundle\Entity\UsuarioTipo $idUsuarioTipo
     */
    public function setUsuarioTipo(\Nicearma\MemesBundle\Entity\UsuarioTipo $UsuarioTipo)
    {
        $this->UsuarioTipo = $UsuarioTipo;
    }

    /**
     * Get UsuarioTipo
     *
     * @return Nicearma\MemesBundle\Entity\UsuarioTipo 
     */
    public function getUsuarioTipo()
    {
        return $this->UsuarioTipo;
    }

    /**
     * Set idUsuarioTipo
     *
     * @param integer $idUsuarioTipo
     */
    public function setIdUsuarioTipo( $idUsuarioTipo)
    {
        $this->idUsuarioTipo = $idUsuarioTipo;
    }

    /**
     * Get idUsuarioTipo
     *
     * @return integer
     */
    public function getIdUsuarioTipo()
    {
        return $this->idUsuarioTipo;
    }

    public function equals(UserInterface $user)
    {
        return $this->username === $user->getUsername();
    }

    public function eraseCredentials() {

    }

    public function getPassword() {
        return $this->clave;
    }

    public function getRoles() {
       $this->idUsuarioTipo->getTipo();
    }

    public function getSalt() {
        return null;
    }

    public function getUsername() {
        return $this->nombre;
    }

    /**
     * Set clave
     *
     * @param string $clave
     */
    public function setClave($clave)
    {
        $this->clave = $clave;
    }

    /**
     * Get clave
     *
     * @return string 
     */
    public function getClave()
    {
        return $this->clave;
    }
}

UsuarioType.php

namespace Nicearma\MemesBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;

class UsuarioType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder
            ->add('nombre')
            ->add('clave')
        ;
    }
    public function getDefaultOptions(array $options)
    {
    return array(
        'data_class' => 'Nicearma\MemesBundle\Entity\Usuario',
    );
    }
    public function getName()
    {
        return 'Usuario';
    }
}

usuarioInfo.php

namespace Nicearma\MemesBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
 * Nicearma\MemesBundle\Entity\UsuarioInfo
 *
 * @ORM\Table(name="usuario_info")
 * @ORM\Entity
 */
class UsuarioInfo
{
    /**
     * @var integer $id
     * 
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string $correo
     * Assert\Email
     * @ORM\Column(name="correo", type="string", length=255, nullable=false)
     */
    private $correo;

    /**
     * @var Usuario
     * @Assert\Type(type="Nicearma\MemesBundle\Entity\Usuario")
     * @ORM\OneToOne(targetEntity="Usuario")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="id_usuario", referencedColumnName="id")
     * })
     */
    private $Usuario;

     /**
     * @var idUsuario
     * @ORM\Column(name="id_usuario", type="integer", nullable=false)
     */
    private $idUsuario;


    /**
     * @var Nacionalidad
     * @Assert\Type(type="Nicearma\MemesBundle\Entity\Nacionalidad")
     * @ORM\ManyToOne(targetEntity="Nacionalidad")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="id_pais", referencedColumnName="id")
     * })
     */
     private $Pais;



    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set correo
     *
     * @param string $correo
     */
    public function setCorreo($correo)
    {
        $this->correo = $correo;
    }

    /**
     * Get correo
     *
     * @return string 
     */
    public function getCorreo()
    {
        return $this->correo;
    }

    /**
     * Set Usuario
     *
     * @param Nicearma\MemesBundle\Entity\Usuario $Usuario
     */
    public function setUsuario(\Nicearma\MemesBundle\Entity\Usuario $Usuario)
    {
        $this->Usuario = $Usuario;
    }

    /**
     * Get Usuario
     *
     * @return Nicearma\MemesBundle\Entity\Usuario 
     */
    public function getUsuario()
    {
        return $this->Usuario;
    }

    /**
     * Set Pais
     *
     * @param Nicearma\MemesBundle\Entity\Nacionalidad $Pais
     */
    public function setPais(\Nicearma\MemesBundle\Entity\Nacionalidad $Pais)
    {
        $this->Pais = $Pais;
    }

    /**
     * Get Pais
     *
     * @return Nicearma\MemesBundle\Entity\Nacionalidad 
     */
    public function getPais()
    {
        return $this->Pais;
    }
}

usuarioInfoType.php

namespace Nicearma\MemesBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
use Doctrine\ORM\EntityRepository;

class UsuarioInfoType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder
            ->add('correo')
            ->add('pais', 'entity', array ('class'=>'Nicearma\\MemesBundle\\Entity\\Nacionalidad','property'=>'nom_pais'))
            ->add('usuario',new UsuarioType);    
        ;
    }

    public function getDefaultOptions(array $options)
    {
    return array(
        'data_class' => 'Nicearma\MemesBundle\Entity\UsuarioInfo',
    );
    }

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

控制器是

public function registroAction(Request $peticion){
        $regUs= new \Nicearma\MemesBundle\Entity\UsuarioInfo();
        $formulario = $this->createForm(new \Nicearma\MemesBundle\Form\UsuarioInfoType(),  $regUs);
        if ($peticion->getMethod() == 'POST') {
            $formulario->bindRequest($peticion);
            if ($formulario->isValid()) {
               // $regUs->setIdUsuario(1);
                $em = $this->getDoctrine()->getEntityManager();
                $
                $em->persist($regUs);
                $em->flush();
                $base->flush();
               return $this->redirect($this->generateUrl('DenunciaEnviada'));
            }else{

            }
        }
        return $this->render('NicearmaMemesBundle:Usuario:usuarioRegistro.html.twig', array('form' => $formulario->createView(),'titulo'=>'Crear usuario','descripcion'=>'usuario','claves'=>'us','nombre'=>'Prueba usuario'));
    }

2 个答案:

答案 0 :(得分:5)

如此简单,它将返回关系类的对象。

- &GT;你正在使用你已经应用查询的主类的getter方法进一步使用关系类的getter方法。

例如

  

$ EXP-&GT; getExperiencesCompany() - &GT;的getName();

答案 1 :(得分:1)

使用OneToOne关系,您应该使用JoinColumn注释而不是您正在做的“JoinColumns(JoinColumn)”。 您可以从doctrine orm文档http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#one-to-one-bidirectional

中查看示例

所以,你可以先尝试更新UsuarioInfo的“Usuario”的属性注释

/**
 * @var Usuario
 * @Assert\Type(type="Nicearma\MemesBundle\Entity\Usuario")
 * @ORM\OneToOne(targetEntity="Usuario")
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="id_usuario", referencedColumnName="id")
 * })
 */
private $Usuario;

/**
 * @var Usuario
 * @Assert\Type(type="Nicearma\MemesBundle\Entity\Usuario")
 * @ORM\OneToOne(targetEntity="Usuario")
 * @ORM\JoinColumn(name="id_usuario", referencedColumnName="id")
 */
private $Usuario;

这同样适用于Usuario的“UsuarioEstado”,“UsuarioTipo”属性。请参阅ManyToOne http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#many-to-one-unidirectional

的示例注释

因此,请确保通过检查正在使用正确的注释来正确配置您的实体,然后再试一次:)