分类无法转换为字符串

时间:2017-05-16 21:30:08

标签: php symfony twig many-to-one

首先,我是编程新手,特别是Symfony / ORM。我正在学习荷兰语课程。这就是荷兰人命名的原因,但是,我在获取一个枝条模板以显示多对一关系方面遇到了问题。我一直得到错误,它无法转换为字符串,我已经google了几个小时,我得到另一个错误,变量为null。但事实并非如此。我将在下面添加代码。

我得到的错误是;

  

[1/2] ContextErrorException:Catchable Fatal Error:类的对象Proxies__CG __ \ AppBundle \ Entity \ Categorie无法转换为字符串

  

[2/2] Twig_Error_Runtime:在渲染模板期间抛出异常(“Catchable Fatal Error:类Proxies__CG __ \ AppBundle \ Entity \ Categorie的对象无法转换为字符串”)。

Artikel.php     

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\Common\Collections\ArrayCollection;
//link naar tabel
/**
* Artikel
*
* @ORM\Table(name="artikel")
* @ORM\Entity(repositoryClass="AppBundle\Repository\ArtikelRepository")
*/
class Artikel
{
//class artikel met alle items die in de tabel staan.
//per items staat aangegeven wat voor type het is en aanvullende gegevens.
/**
 * @var int
 *
 * @ORM\Column(name="Artikelnummer", type="integer", unique=true)
 * @ORM\Id
 */
private $artikelnummer;

/**
 * @var string
 *
 * @ORM\Column(name="Omschrijving", type="string", length=255, nullable=true)
 */
private $omschrijving;

/**
* @var string
* @ORM\ManyToOne(targetEntity="Categorie", inversedBy="artikelen")
* @ORM\JoinColumn(name="categorie", referencedColumnName="id")
 */

 private $categorie;

/**
 * @var string
 *
 * @ORM\Column(name="Technischespecificaties", type="string", length=255 , nullable=true)
 */
private $technischespecificaties;

/**
 * @var string
 *
 * @ORM\Column(name="Status", type="string", length=12, nullable=false)
 */
private $status;

/**
 * @var string
 *
 * @ORM\Column(name="magazijnlocatie", type="string", length=6, nullable=false) 
 * @Assert\Length(
 *      min = 6,
 *      max = 6,
 *      exactMessage = "Invoerwaarde te lang")
 * @Assert\Regex(
 *    pattern = "/^20|[0-1]{1}[0-9]{1}\/[A-Z][0]{1}[0-9]{1}|10$/i",
 *    match=true,
 *    message="Ongeldige locatie [ERROR1]")
 * @Assert\Regex(
 *    pattern = "/^[2]{1}[1-9]{1}\/[A-Z]{1}[0-9]{1}$/i",
 *    match=false,
 *    message="Ongeldige locatie [ERROR2]")
 * @Assert\Regex(
 *    pattern = "/^[3-9]{1}[0-9]{1}\/[A-Z][0-9]{1}$/i",
 *    match=false,
 *    message="Ongeldige locatie [ERROR3]")
 * @Assert\Regex(
 *    pattern = "/^[0-1]{1}[0-9]{1}\/[A-Z][1]{1}[1-9]{1}$/i",
 *    match=false,
 *    message="Ongeldige locatie [ERROR4]")
 * @Assert\Regex(
 *    pattern = "/^[0-1]{1}[0-9]{1}\/[A-Z][2-9]{1}[0-9]{1}$/i",
 *    match=false,
 *    message="Ongeldige locatie [ERROR5]")
 * @Assert\Regex(
 *    pattern = "/^[0-9A-Za-z]+$/i",
 *    match=false,
 *    message="Ongeldige locatie [ERROR6]")
 */
private $magazijnlocatie;

/**
 * @var int
 *
 * @ORM\Column(name="Inkoopprijs", type="decimal", precision=10, scale=2)
 */
private $inkoopprijs;

/**
 * @var string
 *
 * @ORM\Column(name="CodeVervangendArtikel", type="integer")
 */
private $CodeVervangendArtikel;

/**
 * @var string
 *
 * @ORM\Column(name="MinimumVoorraad", type="string")
 */
private $minimumVoorraad;

/**
 * @var string
 *
 * @ORM\Column(name="VoorraadInAantal", type="integer")
 */
private $voorraadInAantal;

/**
 * @var string
 *
 * @ORM\Column(name="Bestelserie", type="integer")
 */
private $bestelserie;



//set en gets van de items
/**
 * Set artikelnummer
 *
 * @param integer $artikelnummer
 *
 * @return Artikel
 */
public function setArtikelnummer($artikelnummer)
{
    $this->artikelnummer = $artikelnummer;

    return $this;
}

/**
 * Get artikelnummer
 *
 * @return int
 */
public function getArtikelnummer()
{
    return $this->artikelnummer;
}

/**
 * Set categorie
 *
 * @param string $categorie
 *
 * @return Artikel
 */
public function setCategorie($categorie)
{
    $this->categorie = $categorie;

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


 public function getCategorie()
{
    return $this->categorie;
}

/**
 * Set omschrijving
 *
 * @param string $omschrijving
 *
 * @return Artikel
 */
public function setOmschrijving($omschrijving)
{
    $this->omschrijving = $omschrijving;

    return $this;
}

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

/**
 * Set technischespecificaties
 *
 * @param string $technischespecificaties
 *
 * @return Artikel
 */
public function setTechnischespecificaties($technischespecificaties)
{
    $this->technischespecificaties = $technischespecificaties;

    return $this;
}

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

/**
 * Set status
 *
 * @param string $status
 *
 * @return Artikel
 */
public function setStatus($status)
{
    $this->status = $status;

    return $this;
}

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

/**
 * Set magazijnlocatie
 *
 * @param string $magazijnlocatie
 *
 * @return Artikel
 */
public function setMagazijnlocatie($magazijnlocatie)
{
    $this->magazijnlocatie = $magazijnlocatie;

    return $this;
}

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

/**
 * Set inkoopprijs
 *
 * @param integer $inkoopprijs
 *
 * @return Artikel
 */
public function setInkoopprijs($inkoopprijs)
{
    $this->inkoopprijs = $inkoopprijs;

    return $this;
}

/**
 * Get inkoopprijs
 *
 * @return int
 */
public function getInkoopprijs()
{
    return $this->inkoopprijs;
}

/**
 * Set CodeVervangendArtikel
 *
 * @param string $CodeVervangendArtikel
 *
 * @return Artikel
 */
public function setCodeVervangendArtikel($CodeVervangendArtikel)
{
    $this->CodeVervangendArtikel = $CodeVervangendArtikel;

    return $this;
}

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

/**
 * Set minimumVoorraad
 *
 * @param string $minimumVoorraad
 *
 * @return Artikel
 */
public function setMinimumVoorraad($minimumVoorraad)
{
    $this->minimumVoorraad = $minimumVoorraad;

    return $this;
}

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

/**
 * Set voorraadInAantal
 *
 * @param string $voorraadInAantal
 *
 * @return Artikel
 */
public function setVoorraadInAantal($voorraadInAantal)
{
    $this->voorraadInAantal = $voorraadInAantal;

    return $this;
}

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

/**
 * Set bestelserie
 *
 * @param string $bestelserie
 *
 * @return Artikel
 */
public function setBestelserie($bestelserie)
{
    $this->bestelserie = $bestelserie;

    return $this;
}

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

Categorie.php

<?php

 namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\Common\Collections\ArrayCollection;

 /**
 * Categorie
 *
 * @ORM\Table(name="categorie")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\CategorieRepository")
 */
class Categorie
{

/**
 * @var string
 *
 * @ORM\Column(name="id", type="string", length=20, unique=true)
 * @ORM\Id
 */
private $id;

/**
 * @var string
 *
 * @ORM\Column(name="beschrijving", type="string", length=255)
 */
private $beschrijving;

/**
* @ORM\OneToMany(targetEntity="Artikel", mappedBy = "categorie")
*/
private $artikelen;

/**
 * @var string
 *
 * @ORM\Column(name="magazijnlocatie", type="string", length=6, nullable=false) 
 * @Assert\Length(
 *      min = 6,
 *      max = 6,
 *      exactMessage = "Invoerwaarde te lang")
 * @Assert\Regex(
 *    pattern = "/^20|[0-1]{1}[0-9]{1}\/[A-Z][0]{1}[0-9]{1}|10$/i",
 *    match=true,
 *    message="Ongeldige locatie [ERROR1]")
 * @Assert\Regex(
 *    pattern = "/^[2]{1}[1-9]{1}\/[A-Z]{1}[0-9]{1}$/i",
 *    match=false,
 *    message="Ongeldige locatie [ERROR2]")
 * @Assert\Regex(
 *    pattern = "/^[3-9]{1}[0-9]{1}\/[A-Z][0-9]{1}$/i",
 *    match=false,
 *    message="Ongeldige locatie [ERROR3]")
 * @Assert\Regex(
 *    pattern = "/^[0-1]{1}[0-9]{1}\/[A-Z][1]{1}[1-9]{1}$/i",
 *    match=false,
 *    message="Ongeldige locatie [ERROR4]")
 * @Assert\Regex(
 *    pattern = "/^[0-1]{1}[0-9]{1}\/[A-Z][2-9]{1}[0-9]{1}$/i",
 *    match=false,
 *    message="Ongeldige locatie [ERROR5]")
 * @Assert\Regex(
 *    pattern = "/^[0-9A-Za-z]+$/i",
 *    match=false,
 *    message="Ongeldige locatie [ERROR6]")
 */
private $magazijnlocatie;

/**
 * Set id
 *
 * @param string $id
 *
 * @return Categorie
 */
public function setId($id)
{
    $this->id = $id;

    return $this;
}

/**
 * Get id
 *
 * @return string
 */
public function getId()
{
    return $this->id;
}
 public function toString()
    {
        return $this->getId();
    }
/**
 * Set beschrijving
 *
 * @param string $beschrijving
 *
 * @return Categorie
 */
public function setBeschrijving($beschrijving)
{
    $this->beschrijving = $beschrijving;

    return $this;
}

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

/**
 * Set magazijnlocatie
 *
 * @param string $magazijnlocatie
 *
 * @return Artikel
 */
public function setMagazijnlocatie($magazijnlocatie)
{
    $this->magazijnlocatie = $magazijnlocatie;

    return $this;
}

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

public function _construct()
{
  $this->artikelen = new ArrayCollection();
}
}

控制器

use Symfony\Component\HttpFoundation\Response;


//use van de entiteiten
use AppBundle\Entity\Artikel;
use AppBundle\Form\Type\Artikel0Type;
use AppBundle\Form\Type\ArtikelType;
use AppBundle\Entity\Categorie;


class ArtikelController extends Controller
{


/**
* @Route("/artikel/alle", name="alleartikelen")
*/

Public function alleArtikelen(Request $request) {
    $artikelen = $this->getDoctrine()->getRepository("AppBundle:Artikel")->findAll();
    return new Response($this->render('artikel.html.twig', array('artikelen' => $artikelen)));

}


/**
         * @Route("/artikel/nieuw", name="nieuwartikel")
         */
        public function nieuwArtikel(Request $request) {
            $nieuwArtikel = new Artikel();
            $form = $this->createForm(ArtikelType::class, $nieuwArtikel);

            $form->handleRequest($request);
            if ($form->isSubmitted() && $form->isValid()) {
                $em = $this->getDoctrine()->getManager();
                $em->persist($nieuwArtikel);
                $em->flush() ;
                return $this->redirect($this->generateurl("alleartikelen")) ;
            }
                return new Response($this->render('form.html.twig', array('form' => $form->createView())));
        }

        /**
                 * @Route("/artikel/wijzig/{artikelnummer}", name="artikelwijzigen")
                 */
                public function wijzigArtikel(Request $request, $artikelnummer) {

                    $bestaandArtikel = $this->getDoctrine()->getRepository("AppBundle:Artikel")->find($artikelnummer);
                    $form = $this->createForm(Artikel0Type::class, $bestaandArtikel);

                    $form->handleRequest($request);
                    if ($form->isSubmitted() && $form->isValid()) {
                        $em = $this->getDoctrine()->getManager();
                        $em->persist($bestaandArtikel);
                        $em->flush() ;
                        return $this->redirect($this->generateurl("alleartikelen", array("artikelnummer"=>$bestaandArtikel->getArtikelnummer()))) ;
                    }
                    return new Response($this->render('form.html.twig', array('form' => $form->createView())));
                }

                /**
                         * @Route("/artikel/verwijder/{artikelnummer}", name="artikelverwijderen")
                         */
                        public function verwijderArtikel(Request $request, $artikelnummer) {
                                $em = $this->getDoctrine()->getManager();
                                $bestaandArtikel = $em->getRepository("AppBundle:Artikel")->find($artikelnummer);
                                $em->remove($bestaandArtikel);
                                $em->flush() ;
                                return $this->redirect($this->generateurl("alleartikelen"));
                            }





}

然后是树枝本身;

{% extends 'base.html.twig' %}
{% block body %}
<h1>Overzicht Artikelen</h1>
<h2><a href="{{ path('nieuwartikel',{}) }}">Nieuw Artikel</a></h2>
<ol>
    {% for artikel in artikelen %}
        <li style="color:darkgreen">
            Artikelnummer: {{artikel.artikelnummer}} <br>
            Omschrijving: {{artikel.omschrijving}} <br>
            Technischespecificaties: {{artikel.technischespecificaties}} <br>
            Categorie: {{artikel.categorie}} <br>
            Magazijnlocatie: {{artikel.magazijnlocatie}} <br>
            Inkoopprijs: {{artikel.inkoopprijs}} <br>
            CodeVervangendArtikel: {{artikel.CodeVervangendArtikel}} <br>
            MinimumVoorraad: {{artikel.minimumVoorraad}} <br>
            VoorraadInAantal: {{artikel.voorraadInAantal}} <br>
            Bestelserie: {{artikel.bestelserie}} <br>

            <a href="{{ path('artikelwijzigen',
{'artikelnummer':artikel.artikelnummer}) }}">Wijzig</a>
            <a href="{{ path('artikelverwijderen',
{'artikelnummer':artikel.artikelnummer}) }}">Verwijder</a>
    </li><br>
{% endfor %}
<ol>
{% endblock %}

1 个答案:

答案 0 :(得分:1)

实体toString中的方法Categorie无效,应为:__toString

审核同一实体的构造函数,应为__construct()而不是_construct()