Jak dostat private ID do entity

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
thunderbuff
Člen | 164
+
0
-

Snažím se o vytvoření modelu po vzoru Entity-Repository-Mapper. Následuji tento návod: https://pla.nette.org/…itory-mapper

Není mi jasná jedna věc. V příkladu je uvedena entita:

<?php
class ShoppingCartItem
{
    private $id; // nastavovat v mapperu reflexí, aby "nešlo" změnit

    public $name; // jméno položky

    public $cost; // kolik stojí

    // .. další vlastnosti

    public function getId()
    {
        return $this->id;
    }
}
?>

„nastavovat v mapperu reflexí, aby "nešlo“ změnit" – co přesně to znamená, jak v mapperu to ID do entity dostanu?

Majkl578
Moderator | 1364
+
0
-

To znamená, že použiješ ReflectionProperty. Na použití je příklad v dokumentaci.

thunderbuff
Člen | 164
+
0
-

Díky, vyřešeno:

<?php

		$entity = new DiscountCode();
		$entity->value = $row->value;
		$entity->price = $row->price;
		$entity->notes = $row->notes;
		$entity->available = $row->available;
		$entity->active = $row->active;
		$entity->from = $row->from;
		$entity->to = $row->to;

		$prop = $entity->getReflection()->getProperty('id');
		$prop->setAccessible(true);
		$prop->setValue($entity, $row->discountcodeid);

?>
Majkl578
Moderator | 1364
+
0
-

Přesně tak. Jinak instance reflexe pro jednotlivé property/třídy se vyplatí kešovat (samozřejmě jen pro znovupoužití v rámci aktuálního requestu).