Для начала я действительно новичок в программировании, особенно в Symfony / ORM. Я получаю уроки на голландском языке. Вот почему голландское именование, но у меня проблемы с получением шаблона веточки, чтобы показать отношение многие к одному. Я продолжаю получать сообщения об ошибках, которые не могут быть преобразованы в строку, я уже несколько часов гуглю и получаю еще одну ошибку, что переменная равна нулю. Тем не менее, это не может быть так. Я добавлю коды ниже.
Я получаю ошибки;
[1/2] ContextErrorException: Catchable Fatal Error: Объект класса Proxies__CG __ \ AppBundle \ Entity \ Category не может быть преобразован в строку
а также
[2/2] Twig_Error_Runtime: возникла исключительная ситуация во время рендеринга шаблона («Catchable Fatal Error: объект класса Proxies__CG __ \ AppBundle \ Entity \ Category не может быть преобразован в строку»).
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 %}
Метод toString
в сущности Categorie
недействительно, должно быть: __toString
,
Просмотрите конструктор той же сущности тоже, должно быть __construct()
не _construct()
Других решений пока нет …