如何在 html.twig 上显示链接到主要实体的另一个实体?

Posted

技术标签:

【中文标题】如何在 html.twig 上显示链接到主要实体的另一个实体?【英文标题】:How can I show another Entity linked to the main one on html.twig? 【发布时间】:2021-12-15 05:49:35 【问题描述】:

我无法在另一个链接的 html.twig 上展示实体的属性。

基本上,一个实体叫 Cats,一个实体叫约会关系 ManyToOne(一只猫可以有多个约会,但一个约会只链接到一只猫)

猫实体:

/**
 * @ORM\OneToMany(targetEntity=Appointment::class, mappedBy="cat", orphanRemoval=true)
 */
private $appointments;

/**
 * @return Collection|Appointment[]
 */
public function getAppointments(): Collection

    return $this->appointments;


public function addAppointment(Appointment $appointment): self

    if (!$this->appointments->contains($appointment)) 
        $this->appointments[] = $appointment;
        $appointment->setCat($this);
    

    return $this;


public function removeAppointment(Appointment $appointment): self

    if ($this->appointments->removeElement($appointment)) 
        // set the owning side to null (unless already changed)
        if ($appointment->getCat() === $this) 
            $appointment->setCat(null);
        
    

    return $this;

约会实体:

/**
 * @ORM\ManyToOne(targetEntity=Cats::class, inversedBy="appointments", cascade="persist" )
 * @ORM\JoinColumn(nullable=false)
 */
private $cat;

public function getCat(): ?Cats

    return $this->cat;


public function setCat(?Cats $cat): self

    $this->cat = $cat;

    return $this;

这是我在 html.twig 中尝试为约会显示做的事情

% extends 'base.html.twig' %
% block title %Appointment% endblock %
% block main %

<h1>Appointment</h1>

% for cat in appointment.cats %
    <div>
        <td> appointment.cat_id </td>
    </div>
% endfor %

所以我不断出错:

属性“cats”和方法“cats()”、“getcats()”/“iscats()”/“hascats()”或“__call()”都不存在且具有公共在“App\Entity\Appointment”类中访问。

你能帮忙吗?

【问题讨论】:

因为Appointment::$catManyToOne,这意味着许多约会实体都有一个猫实体。在您的树枝中,% for cat in appointment.cats % 应该是 % set cat = appointment.cat %,它转换为 Appointment::getCat(): Cat,而 cat.appointments 转换为 Cat::getAppointments(): Collection(一个 Cat 实体有许多约会实体)另外 apointment.cat_id 应该是 cat.id 它尝试将其更改为 % set cat =ointment.cat % cat.id 作为回应,我有“变量“约会”不存在。”你为什么这么认为? 需要查看渲染模板的控制器。 【参考方案1】:

谢谢,我把我的代码改成了下面的代码,它工作了:

% for appointment in appointments %
    % set cat = appointment.cat %
        <div>
             cat.id 
        </div>
% endfor %

【讨论】:

很高兴看到问题已经解决了。您可以考虑接受您的答案作为正确答案。

以上是关于如何在 html.twig 上显示链接到主要实体的另一个实体?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Symfony (Twig) 中包含可重用的小部件?

如何添加链接以在 SonataAdminBundle 中的关系字段上显示关系实体的操作

Drupal / Twig / Symfony Routing为base_url返回“null”

如何将查询url参数传递给twig模板

如何在 Twig 中将变量从父模板传递到子模板?

在 Heroku 上部署 Symfony5/php7 应用程序时找不到模板“base.html.twig”错误消息