如何使用 Twig 渲染自定义的可嵌入学说字段?

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

我有一个 Doctrine 实体,它有一个字符串字段,我正在尝试将其更改为可嵌入的以使用更好的抽象。

我创建了新类,更改了字段类型,然后用于渲染精细的模板停止工作。

这是实体定义:


declare(strict_types=1);

namespace App\Entity;


/**
 * Security.
 *
 * @ORM\Table(name="security")
 * @ORM\Entity(repositoryClass="App\Repository\SecurityRepository")
 */
class Security
{
    /**
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private int $id;

    /**
     * @ORM\Column(name="symbol", type="string", length=255, nullable=true)
     *
     * @todo rename to ticker?
     */
    private ?string $symbol = null;

    /**
     * @ORM\Column(type="string", length=9, nullable=true, unique=true)
     */
    private ?CUSIP $cusip;

    /**
     * @return SecurityPrice
     */
    public function getPriceAt(DateTimeInterface $d): ?SecurityPrice
    {
        $foundPrices = $this->getPrices()->filter(fn(SecurityPrice $price) => $price->getDate() == $d);

        return !$foundPrices->isEmpty() ? $foundPrices->first() : null;
    }

    public function getCusip(): ?CUSIP
    {
        return $this->cusip;
    }

    /**
     * @return $this
     */
    public function setCusip(?CUSIP $cusip): self
    {
        $this->cusip = $cusip;

        return $this;
    }

    public function __construct()
    {
        $this->prices = new ArrayCollection();
    }
}

class CUSIP {
   private string $value;

   public function __construct(string $value) {
      if (strlen($value) < 9) {
          throw new InvalidCUSIP();
      }

      $this->value = $value;
   }

    public function __toString()
    {
        return $this->value;
    }
}

这就是我的树枝模板的样子:

                   {% for m in missing %}
                        <tr>
                            <td>{{ m.getSecurity.getSymbol }}</td>
                            <td>{{ m.getSecurity.getCusip }}</td>
                            <td>{{ m.getSecurity.getIsin }}</td>
                            <td>{{ m.getSecurity.getDescription }}</td>
                            <td>{{ m.getSecurity.getSecurityType }}</td>
                            <td>{{ m.getDate|date('d-M-y') }}</td>
                            <td><input type="text" name="price[{{ m.getId }}]" class="securityPrice"/></td>
                        </tr>
                    {% endfor %}

我得到的错误是:

Typed property App\Entity\Security::$cusip must be an instance of App\Entity\CUSIP or null, string used

谢谢,

doctrine twig
1个回答
0
投票

所以我找到了自己问题的答案:我缺少注释以及字段定义。

当我将其更改为:

     /**
     * @ORM\Embedded(class = "CUSIP")
     */
    private ?CUSIP $cusip = null;

它起作用了。谢谢!

© www.soinside.com 2019 - 2024. All rights reserved.