Простые обратные вызовы Symfony 4 не работают - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть простая сущность под названием Post.

/**
 * Class Post
 * @package App\Entity
 *
 * @ORM\Entity(repositoryClass="App\Repository\Blog\PostRepository")
 * @ORM\Table(name="posts")
 * @ORM\HasLifecycleCallbacks()
 *
 */
class Post
{ 
    /**
     * @var \DateTime
     * @ORM\Column(type="datetime", options={"default":"CURRENT_TIMESTAMP"})
     */
    protected $createdDateTime;

    /**
     * @ORM\PrePersist()
     */
    public function testEvent()
    {
        $this->createdDateTime = '2018-11-11';
        //dump(123); exit; this is not working either
    }
}

Теперь я использую Nelmio Alice Bundle для генерации некоторых фикстур базы данных, и когда я закончу с этим, я перебираю их, чтобы сохранить то, что у меня есть в базе данных..

foreach($this->fixtures as $fixture) {
    $this->entityManager->persist($fixture);
    if($counter === self::BATCH_SIZE['MEDIUM']) {
        $this->entityManager->flush();
        $this->entityManager->clear();
    }
    counter++;
} 

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

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

1 Ответ

0 голосов
/ 18 ноября 2018

Таким образом, проблема заключается в том, что Symfony не перехватывает и не обрабатывает события LifeCycle Doctrine правильно. В этом случае предполагалось вызвать метод по моему выбору для события PrePersist - setter для $ createDateTime.

Я выполняю это в своем функциональном тесте, так что, может, в этом проблема? Я не думаю, что раньше вызывал persist (), что вызвало бы эту проблему. Мой сценарий также работает, как и ожидалось, когда предоставлены правильные данные.

Я считаю, что это вина Symfony, потому что, когда я создал своего собственного подписчика на событие PrePersist , я смог обработать это событие.

Это не решение, а обходной путь - создайте своего собственного слушателя событий или подписчика и позаботьтесь об этом там.

...