symfony 变量“produit”不存在

w8biq8rn  于 2023-11-22  发布在  其他
关注(0)|答案(1)|浏览(146)

我是Symfony的初学者。我被卡住了,因为我不能调试我的电子商务应用程序。我真的不知道问题是什么。我试图显示数据库中的数据,但无论我怎么尝试,它都给我一个错误消息。
当我执行dump and die时,它输出product表中的字段,但不输出数据。(数据库中包含的名称)它会给我一个错误消息:“Symfony\ Bridge\Doctrine\ArgumentResolver\IdentyValueResolver”找不到“App\Entity\Produit”对象。当我尝试将/details替换为/{name}时,并把这个网址/产品/详细信息在搜索栏,我得到这个错误消息:变量“产品”不存在.
感谢您发送编修。
控制器

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use App\Entity\Produit;

#[Route('/produit', name: 'produit_')]
class ProduitController extends AbstractController
{
    
#[Route('/', name: 'index')]
    public function index(): Response
    {
        return $this->render('produit/index.html.twig'
        );
    }
    #[Route('/{nom}', name: 'details')]
    public function details(Produit $produit): Response
    {
        
        // dd($produit->getNom());
        return $this->render('produit/details.html.twig'
    );

    }
}

字符串
实体

<?php
    
    namespace App\Entity;
    
    
    use App\Repository\ProduitRepository;
    use Doctrine\Common\Collections\ArrayCollection;
    use Doctrine\Common\Collections\Collection;
    use Doctrine\DBAL\Types\Types;
    use Doctrine\ORM\Mapping as ORM;
    
    #[ORM\Entity(repositoryClass: ProduitRepository::class)]
    class Produit
    {
        
        #[ORM\Id]
        #[ORM\GeneratedValue]
        #[ORM\Column]
        private ?int $id = null;
    
        #[ORM\Column(length: 100)]
        private ?string $nom = null;
    
        #[ORM\Column(type: Types::TEXT)]
        private ?string $description = null;
    
        #[ORM\Column]
        private ?int $prix = null;
    
        #[ORM\ManyToOne(inversedBy: 'produits')]
        private ?Categorie $id_categorie = null;
    
        #[ORM\OneToMany(mappedBy: 'produits', targetEntity: Images::class)]
        private Collection $images;
    
        #[ORM\OneToMany(mappedBy: 'produit', targetEntity: CommandeDetails::class)]
        private Collection $commandeDetails;
    
        public function __construct()
        {
            $this->commandeDetails = new ArrayCollection();
        }
    
    
        public function getId(): ?int
        {
            return $this->id;
        }
    
        public function getNom(): ?string
        {
            return $this->nom;
        }
    
        public function setNom(string $nom): static
        {
            $this->nom = $nom;
    
            return $this;
        }
    
        public function getDescription(): ?string
        {
            return $this->description;
        }
    
        public function setDescription(string $description): static
        {
            $this->description = $description;
    
            return $this;
        }
    
        public function getPrix(): ?int
        {
            return $this->prix;
        }
    
        public function setPrix(int $prix): static
        {
            $this->prix = $prix;
    
            return $this;
        }
    
        public function getIdCategorie(): ?Categorie
        {
            return $this->id_categorie;
        }
    
        public function setIdCategorie(?Categorie $id_categorie): static
        {
            $this->id_categorie = $id_categorie;
    
            return $this;
        }
    
        /**
         * @return Collection<int, Images>
         */
        public function getImages(): Collection
        {
            return $this->images;
        }
    
        public function addImage(Images $image): static
        {
            if (!$this->images->contains($image)) {
                $this->images->add($image);
                $image->setProduits($this);
            }
    
            return $this;
        }
    
        public function removeImage(Images $image): static
        {
            if ($this->images->removeElement($image)) {
                // set the owning side to null (unless already changed)
                if ($image->getProduits() === $this) {
                    $image->setProduits(null);
                }
            }
    
            return $this;
        }
    
        /**
         * @return Collection<int, CommandeDetails>
         */
        public function getCommandeDetails(): Collection
        {
            return $this->commandeDetails;
        }
    
        public function addCommandeDetail(CommandeDetails $commandeDetail): static
        {
            if (!$this->commandeDetails->contains($commandeDetail)) {
                $this->commandeDetails->add($commandeDetail);
                $commandeDetail->setProduit($this);
            }
    
            return $this;
        }
    
        public function removeCommandeDetail(CommandeDetails $commandeDetail): static
        {
            if ($this->commandeDetails->removeElement($commandeDetail)) {
                // set the owning side to null (unless already changed)
                if ($commandeDetail->getProduit() === $this) {
                    $commandeDetail->setProduit(null);
                }
            }
    
            return $this;
        }
    
        
    }


树枝

{% extends 'base.html.twig' %}

{% block title %}Détails des produits{% endblock %}

{% block body %}

<h1>Details {{ produit.nom }} </h1>

{% endblock %}

slwdgvem

slwdgvem1#

此答案适用于“变量”产品“不存在”消息
你需要将Object传递给视图。
你可以这样做:

#[Route('/{nom}', name: 'details')]
public function details(Produit $produit): Response
{
    return $this->render('produit/details.html.twig', [
        'produit' => $produit
    ]);
}

字符串
关于你的URL:
'details'只是你的路由的名称。你永远不会把它放在URL中。
调用你的详细信息路由的正确方法是把这个放在你的url中:

/produit/{name-of-a-product}为您提供示例/produit/Rossi

如果它告诉你该产品不存在。请验证您的数据库中是否有名称为“Rossi”的产品。

相关问题