类\ BackendBundle \ Entity \ Categoria的对象无法转换为字符串

时间:2017-05-03 09:18:35

标签: php symfony twig

我创建了一个包含产品和类别的数据库:

CREATE TABLE categoria(
id       int(255) auto_increment not null,
nombre     varchar(50),
CONSTRAINT pk_categoria PRIMARY KEY(id),
)ENGINE = InnoDb;

CREATE TABLE producto(
id       int(255) auto_increment not null,
nombre     varchar(50),
categoria int(11),
createdAt datetime,
updatedAt datetime,
CONSTRAINT pk_producto PRIMARY KEY(id),
CONSTRAINT fk_producto_categoria FOREIGN KEY(categoria) references categoria(id),
)ENGINE = InnoDb;

使用twig打印产品时,除了类别编号之外,它显示所有字段,我收到错误:

  

在渲染模板期间抛出异常(" Catchable>致命错误:类Proxies__CG __ \ BackendBundle \ Entity \ Categoria>的对象无法转换为字符串")。

有什么想法解决这个问题?

producto.orm.yml

BackendBundle\Entity\Producto:
    type: entity
    table: producto
    indexes:
        fk_producto_categoria:
            columns:
                - categoria
    id:
        id:
            type: integer
            nullable: false
            options:
                unsigned: false
            id: true
            generator:
                strategy: IDENTITY
    fields:
        nombre:
            type: string
            nullable: true
            length: 100
            options:
                fixed: false
        createdat:
            type: datetime
            nullable: true
            column: createdAt
        updatedat:
            type: datetime
            nullable: true
            column: updatedAt
    manyToOne:
        categoria:
            targetEntity: Categoria
            cascade: {  }
            fetch: LAZY
            mappedBy: null
            inversedBy: null
            joinColumns:
                categoria:
                    referencedColumnName: id
            orphanRemoval: false
    lifecycleCallbacks: {  }

categoria.orm.yml

BackendBundle\Entity\Categoria:
    type: entity
    table: categoria
    id:
        id:
            type: integer
            nullable: false
            options:
                unsigned: false
            id: true
            generator:
                strategy: IDENTITY
    fields:
        nombre:
            type: string
            nullable: true
            length: 50
            options:
                fixed: false
    lifecycleCallbacks: {  }

producto.php

<?php

namespace BackendBundle\Entity;
use Symfony\Component\Security\Core\User\UserInterface;

/**
 * Producto
 */
class Producto
{
    /**
     * @var integer
     */
    private $id;

    /**
     * @var string
     */
    private $nombre;

   /**
     * @var integer
     */
    private $categoria;

    /**
     * @var \DateTime
     */
    private $createdAt;

    /**
     * @var \DateTime
     */
    private $updatedAt;


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

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

        return $this;
    }

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

    /**
     * Set categoria
     *
     * @param integer $categoria
     *
     * @return Producto
     */
    public function setCategoria($categoria)
    {
        $this->categoria = $categoria;

        return $this;
    }

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

    /**
     * 
     */
    public function __toString(){

        return $this->id;
    }

    /**
     * Set createdAt
     *
     * @param \DateTime $createdAt
     *
     * @return Producto
     */
    public function setCreatedAt($createdAt)
    {
        $this->createdAt = $createdAt;

        return $this;
    }

    /**
     * Get createdAt
     *
     * @return \DateTime
     */
    public function getCreatedAt()
    {
        return $this->createdAt;
    }

    /**
     * Set updatedAt
     *
     * @param \DateTime $updatedAt
     *
     * @return Producto
     */
    public function setUpdatedAt($updatedAt)
    {
        $this->updatedAt = $updatedAt;

        return $this;
    }

    /**
     * Get updatedAt
     *
     * @return \DateTime
     */
    public function getUpdatedAt()
    {
        return $this->updatedAt;
    }   

    /**
     * @var \DateTime
     */
    private $createdat;

    /**
     * @var \DateTime
     */
    private $updatedat;

}

1 个答案:

答案 0 :(得分:0)

你正试图回应&#34;通过Twig的一个对象。在这种情况下,&#34;分类&#34;宾语。你可能想要回应这个名字,而不是回应这个对象;

{{ producto.categoria.nombre }} 

解决此问题的另一种方法是将一个__toString方法添加到Categoria实体,例如;

class Categoria
{
    ...

    /**
     * @var string
     */
    private $nombre;

    ...

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

你在这里做的是告诉PHP每当你访问对象&#34;分类&#34;作为字符串,您应该使用其名称。因此,当您尝试echo $categoria{{ categoria }}时,PHP会查找__toString方法并回显您在该方法中返回的内容。

尽管我仍然希望您明确使用{{ categoria.name }}