Замечен, что решение вывешено Луи-Филипп, после недавней установки, не сработало, так как метод triggerEvent под классом EntityManager звонит array_shift на аргументах. Это привело к тому, что обратный вызов получал только четыре из пяти требуемых параметров.
$em->registerEvent(HireVoice\Neo4j\EntityManager::RELATION_CREATE, function ($type, $relationName, $from, $to, $relation) {
// $relation is the Everyman\Neo4j\Relationship
if ($relationName === 'GOES_TO_MARKET') {
$relation->setProperty('foobar', 'baz')->save();
}
});
Это было исправлено заменой следующее: (. Обратите внимание, что это не была тщательно протестирована и может повлиять на другие части кода)
private function triggerEvent($eventName, $data)
{
if (isset($this->eventHandlers[$eventName])) {
$args = func_get_args();
array_shift($args);
foreach ($this->eventHandlers[$eventName] as $callback) {
$clone = $args;
call_user_func_array($callback, $clone);
}
}
}
по:
private function triggerEvent($eventName, $data)
{
if (isset($this->eventHandlers[$eventName])) {
$args = func_get_args();
foreach ($this->eventHandlers[$eventName] as $callback) {
$clone = $args;
call_user_func_array($callback, $clone);
}
}
}
Извините за наивный вопрос, но я еще не делал обратные вызовы. Где бы вы перечислили такую функцию? – jini
, эта регистрация событий может использоваться несколько раз, поскольку свойства должны быть несколько динамическими. спасибо – jini
, где мы добавим вышеуказанный код? В классе Entity или в контроллере на экземпляре $ em? –