Как Doctrine2 устанавливает значения Id - PullRequest
1 голос
/ 04 ноября 2011

У меня есть вопрос из любопытства о внутренней работе Учения2.Я как пользователь вижу действительно чистый и надежный интерфейс, но под капотом должно быть какое-то тяжелое волшебство.

Когда я генерирую простую сущность, она выглядит примерно так:

class SimpleEntity
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(type="string")
     */
    protected $title;

    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set title
     *
     * @param string $title
     */
    public function setTitle($title)
    {
        $this->title = $title;
    }

    /**
     * Get title
     *
     * @return string 
     */
    public function getTitle()
    {
        return $this->title;
    }
}

Как вы заметите, одна вещь явно отсутствует, нет способа установить идентификатор, но тем не менее фабрики доктрин возвращают сущности с установленными идентификаторами.Как это может работать?Я попытался просмотреть источник, но где-то потерял дорожку.

Как можно перезаписать защищенные значения, не входя в иерархию классов?

1 Ответ

4 голосов
/ 04 ноября 2011

Ответ Отражение . Смотрите http://www.doctrine -project.org / docs / orm / 2.1 / en / tutorials / Getting-Start-xml-edition.html # a-first-prototype

Не копаясь в источнике Доктрины, я бы сказал, что он использует ReflectionProperty::setValue()

...