使用 Twig 时如何处理 Doctrine 可嵌入的空值?

问题描述 投票:0回答:1

我在 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 渲染自定义可嵌入学说字段?

php symfony doctrine twig
1个回答
0
投票

您试图在初始化之前访问 $value 变量。为了解决这个问题,您可以使其可为空,并使用以下声明将其初始化为空值:

private ?string $value = null;
© www.soinside.com 2019 - 2024. All rights reserved.