Chyba: Typed property must not be accessed before initialization
Při otevírání některých starých produktů v administraci se vyskytuje chyba:
Uncaught PHP Exception Error: "Typed property App\Entity\Product::$createdAt must not be accessed before initialization"
Chyba se objevila při pokusu o smazání produktu v admin/produkty/odstranit.html.twig na řádku 98.
Příčina
V entitě Product.php je property $createdAt definována jako typed property bez nullable:
#[ORM\Column(type: Types::DATETIME_MUTABLE, nullable: true)]
private \DateTimeInterface $createdAt;
Důvody vzniku:
- V databázi mohou existovat historické produkty s hodnotou
created_at = NULL - V konstruktoru entity je sice inicializace
$this->createdAt = new \DateTime(), ale Doctrine při načítání z DB nepoužívá konstruktor - Doctrine používá reflection a nastavuje properties přímo z databázových hodnot
- Pokud je v DB hodnota NULL, property
$createdAtzůstane neinicializovaná - PHP 8.0+ vyžaduje, aby typed properties byly buď:
- Inicializované (
= null) - Nullable (
?\DateTimeInterface) - Nebo nastavené v konstruktoru (což Doctrine nepoužívá)
- Inicializované (