我在 Symfony 应用程序中实现 Doctrine 嵌入时遇到问题
我在树枝模板中有这个:
<td>{% if m.getSecurity.getIsin %}{{ m.getSecurity.getIsin }}{% endif %}</td>
当渲染模板时,我收到此错误:
Typed property App\Entity\ISIN::$value must not be accessed before initialization
这是我的实体定义:
<?php
declare(strict_types=1);
namespace App\Entity;
use App\Exceptions\InvalidCUSIP;
use App\Exceptions\InvalidISIN;
use DateTimeInterface;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\ORM\Mapping\Embedded;
use Doctrine\ORM\Mapping\Embeddable;
/**
* Security.
*
* @ORM\Table(name="security")
* @ORM\Entity(repositoryClass="App\Repository\SecurityRepository")
*/
class Security
{
/**
* @ORM\Embedded(class = "ISIN", columnPrefix=false)
*/
private ?ISIN $isin = null;
public function getIsin(): ?ISIN
{
return $this->isin;
}
/**
* @return $this
*/
public function setIsin(?ISIN $isin): self
{
$this->isin = $isin;
return $this;
}
}
/** @Embeddable */
class ISIN
{
public const CHAR_COUNT = 12;
/**
* @ORM\Column (name = "isin", type="string", length=12, nullable=true, unique=true)
*/
private string $value;
/**
* @throws InvalidISIN
*/
public function __construct(string $value)
{
if (strlen($value) != self::CHAR_COUNT) {
throw new InvalidISIN($value);
}
$this->value = $value;
}
public function __toString(): string
{
return $this->value;
}
}
我最近更改了一个更简单的实现,该实现将字段
isin
作为主要实体的一部分,并且一切正常。我在数据库中有一些记录,其中字段 isin
为空,这应该没问题......
有什么想法吗?
P.S.:相关问题(也是我提出的:如何使用 Twig 渲染自定义可嵌入学说字段?)
您试图在初始化之前访问 $value 变量。为了解决这个问题,您可以使其可为空,并使用以下声明将其初始化为空值:
private ?string $value = null;