属性 ... 也不是其中一种方法
Neither the property ... nor one of the methods
具有一对一关系的两个实体
第一个是 table
第二个是视图
细胞核
/**
* Nuclei
*
* @ORM\Table(name="datinuclei")
* @ORM\Entity(repositoryClass="App\Repository\NucleiRepository")
*/
class Nuclei
{
/**
* @var int
*
* @ORM\Id
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\GeneratedValue(strategy="NONE")
*/
private $id;
/**
* @var NucleiStatistiche
*
* @ORM\OneToOne(targetEntity="NucleiStatistiche", fetch="EAGER")
* @ORM\JoinColumn(name="id", referencedColumnName="id", nullable=false)
*/
private $statistiche;
核统计
/**
* NucleiStatistiche
*
* @ORM\Table(name="nuclei_001")
* @ORM\Entity()
*/
class NucleiStatistiche
{
/**
* @var int
*
* @ORM\Id
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\GeneratedValue(strategy="NONE")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="totale_conferimenti", type="integer", nullable=false)
*/
private $totale_conferimenti;
/**
* @var string
*
* @ORM\Column(name="totale_indifferenziata", type="integer", nullable=false)
*/
private $totale_indifferenziata;
/**
* @var string
*
* @ORM\Column(name="percentuale_indifferenziata", type="integer", nullable=false)
*/
private $percentuale_indifferenziata;
public function getTotaleConferimenti(): ?string
{
return $this->totale_conferimenti;
}
public function getTotaleIndifferenziata(): ?string
{
return $this->totale_indifferenziata;
}
public function getPercentualeIndifferenziata(): ?string
{
return $this->percentuale_indifferenziata;
}
使用
在控制器上进行测试
$this->getDoctrine()->getRepository(Nuclei::class)->findBy(
array('comune' => $this->id_comune, 'id' => '14523')
);
{% for nucleo in nuclei %}
{{ dump(nucleo.statistiche) }}
{% endfor %}
App\Entity\NucleiStatistiche {#925 ▼
-id: 14523
-totale_conferimenti: 107
-totale_indifferenziata: 2
-percentuale_indifferenziata: 2
}
我可以使用转储查看值,但是当将 属性 引用到 twig 中时,我收到错误消息
{% for nucleo in nuclei %}
{{ dump(nucleo.statistiche.totale_conferimenti) }}
{% endfor %}
既不是 属性 totale_conferimenti
也不是其中一种方法 totale_conferimenti()
,
gettotale_conferimenti()
/istotale_conferimenti()
/hastotale_conferimenti()
或 __call()
存在
并在 class App\Entity\NucleiStatistiche
.
中具有 public 访问权限
我不明白解决方案是什么...疯了!!!
公理:在你理解之前,一切都很困难。
我们首先需要了解其工作原理。在 PHP 中,private
/protected
表示它们在对象范围之外不可用。 Twig 尝试从对象范围之外访问它们,这导致了问题。
换句话说:您的 Twig 尝试使用的内容对它不可用。
但是,我确定您已经看到 Twig 似乎使用 private
/protected
成员,因此您的经验证据似乎与我概述的理论相矛盾。但也只是表面上的。您了解问题所在,但此时您还不了解如何使用这些关键字。
documentation 很清楚,当它解释说当使用 foo.bar 时,如果 bar 不是 foo 的成员,那么它最终会检查 foo.getBar( ), 一个 getter。因此,您将需要实施 getStatistiche
并对其成员进行类似操作。我有一段时间没有使用 Twig,但如果我没记错的话,totale_conferimenti
你将需要 getTotaleConferimenti
.
编辑(Jakumi 的有用评论):
你大约有 90% 是对的。 Symfony 通常采用驼峰式大小写,在这种情况下,您假定的 getter 名称是正确的。错误消息指出了预期的 getter 名称。还有其他方便的信息:dump 的输出有一个 - 前置到每个 private/inaccessible 属性 和 + 前置到每个 public 属性。然而,诊断是 100% 正确的,因为“无法访问”属性 而缺少 getter,并且没有可能的回退。
具有一对一关系的两个实体 第一个是 table 第二个是视图
细胞核
/**
* Nuclei
*
* @ORM\Table(name="datinuclei")
* @ORM\Entity(repositoryClass="App\Repository\NucleiRepository")
*/
class Nuclei
{
/**
* @var int
*
* @ORM\Id
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\GeneratedValue(strategy="NONE")
*/
private $id;
/**
* @var NucleiStatistiche
*
* @ORM\OneToOne(targetEntity="NucleiStatistiche", fetch="EAGER")
* @ORM\JoinColumn(name="id", referencedColumnName="id", nullable=false)
*/
private $statistiche;
核统计
/**
* NucleiStatistiche
*
* @ORM\Table(name="nuclei_001")
* @ORM\Entity()
*/
class NucleiStatistiche
{
/**
* @var int
*
* @ORM\Id
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\GeneratedValue(strategy="NONE")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="totale_conferimenti", type="integer", nullable=false)
*/
private $totale_conferimenti;
/**
* @var string
*
* @ORM\Column(name="totale_indifferenziata", type="integer", nullable=false)
*/
private $totale_indifferenziata;
/**
* @var string
*
* @ORM\Column(name="percentuale_indifferenziata", type="integer", nullable=false)
*/
private $percentuale_indifferenziata;
public function getTotaleConferimenti(): ?string
{
return $this->totale_conferimenti;
}
public function getTotaleIndifferenziata(): ?string
{
return $this->totale_indifferenziata;
}
public function getPercentualeIndifferenziata(): ?string
{
return $this->percentuale_indifferenziata;
}
使用
在控制器上进行测试$this->getDoctrine()->getRepository(Nuclei::class)->findBy(
array('comune' => $this->id_comune, 'id' => '14523')
);
{% for nucleo in nuclei %}
{{ dump(nucleo.statistiche) }}
{% endfor %}
App\Entity\NucleiStatistiche {#925 ▼
-id: 14523
-totale_conferimenti: 107
-totale_indifferenziata: 2
-percentuale_indifferenziata: 2
}
我可以使用转储查看值,但是当将 属性 引用到 twig 中时,我收到错误消息
{% for nucleo in nuclei %}
{{ dump(nucleo.statistiche.totale_conferimenti) }}
{% endfor %}
既不是 属性 totale_conferimenti
也不是其中一种方法 totale_conferimenti()
,
gettotale_conferimenti()
/istotale_conferimenti()
/hastotale_conferimenti()
或 __call()
存在
并在 class App\Entity\NucleiStatistiche
.
我不明白解决方案是什么...疯了!!!
公理:在你理解之前,一切都很困难。
我们首先需要了解其工作原理。在 PHP 中,private
/protected
表示它们在对象范围之外不可用。 Twig 尝试从对象范围之外访问它们,这导致了问题。
换句话说:您的 Twig 尝试使用的内容对它不可用。
但是,我确定您已经看到 Twig 似乎使用 private
/protected
成员,因此您的经验证据似乎与我概述的理论相矛盾。但也只是表面上的。您了解问题所在,但此时您还不了解如何使用这些关键字。
documentation 很清楚,当它解释说当使用 foo.bar 时,如果 bar 不是 foo 的成员,那么它最终会检查 foo.getBar( ), 一个 getter。因此,您将需要实施 getStatistiche
并对其成员进行类似操作。我有一段时间没有使用 Twig,但如果我没记错的话,totale_conferimenti
你将需要 getTotaleConferimenti
.
编辑(Jakumi 的有用评论):
你大约有 90% 是对的。 Symfony 通常采用驼峰式大小写,在这种情况下,您假定的 getter 名称是正确的。错误消息指出了预期的 getter 名称。还有其他方便的信息:dump 的输出有一个 - 前置到每个 private/inaccessible 属性 和 + 前置到每个 public 属性。然而,诊断是 100% 正确的,因为“无法访问”属性 而缺少 getter,并且没有可能的回退。