Слушатели событий graphaware/neo4j-php-ogm
Недавно я создал новый проект Symfony (3.1) с зависимостью от graphaware/neo4j-php-ogm и neo4j/neo4j-bundle для управления моей базой данных.
Затем я создал новый класс Entity с именем User со свойствами (логин, пароль, ...) и хочу автоматически установить текущую дату до наступления события сброса (на preFlush). Я видел константу PRE_FLUSH в neo4j-php-ogm / src / Events.php ( https://github.com/graphaware/neo4j-php-ogm/blob/master/src/Events.php), но не нашел любая информация об этом в документации.
Итак, мой вопрос: можем ли мы использовать эту функциональность в реальной версии OGM? Если да, у вас есть пример использования?
Спасибо за помощь!
2 ответа
Да, вы можете, это не задокументировано, вы правы, я позабочусь, чтобы это было в ближайшее время.
Интеграционный тест здесь: https://github.com/graphaware/neo4j-php-ogm/blob/master/tests/Integration/EventListenerIntegrationTest.php
Во-первых, вам нужно создать класс, который будет действовать как EventListener для preFlush
событие EntityManager и метод, реагирующий на событие:
<?php
namespace GraphAware\Neo4j\OGM\Tests\Integration\Listeners;
use GraphAware\Neo4j\OGM\Event\PreFlushEventArgs;
use GraphAware\Neo4j\OGM\Tests\Integration\Model\User;
class Timestamp
{
public function preFlush(PreFlushEventArgs $eventArgs)
{
$dt = new \DateTime("NOW", new \DateTimeZone("UTC"));
foreach ($eventArgs->getEntityManager()->getUnitOfWork()->getNodesScheduledForCreate() as $entity) {
if ($entity instanceof User) {
$entity->setUpdatedAt($dt);
}
}
}
}
Затем вы можете зарегистрировать этот прослушиватель событий после создания менеджера сущностей:
/**
* @group pre-flush
*/
public function testPreFlushEvent()
{
$this->clearDb();
$this->em->getEventManager()->addEventListener(Events::PRE_FLUSH, new Timestamp());
$user = new User("ikwattro");
$this->em->persist($user);
$this->em->flush();
$this->assertNotNull($user->getUpdatedAt());
var_dump($user->getUpdatedAt());
}
Результат теста:
ikwattro@graphaware-team ~/d/g/p/ogm> ./vendor/bin/phpunit tests/ --group pre-flush
PHPUnit 5.6.2 by Sebastian Bergmann and contributors.
Runtime: PHP 5.6.27
Configuration: /Users/ikwattro/dev/graphaware/php/ogm/phpunit.xml.dist
. 1 / 1 (100%)int(1486763241)
Time: 378 ms, Memory: 5.00MB
OK (1 test, 1 assertion)
Результат в базе данных:
Спасибо большое! Это отлично работает. Если кто-то захочет использовать его, не забудьте указать свой объект как "int".;)