Esempio n. 1
0
 protected function mountEventReceivers(Jarvis $app)
 {
     $app->on(BroadcasterInterface::EXCEPTION_EVENT, function (ExceptionEvent $event) use($app) : void {
         $throwable = $event->exception();
         $msg = sprintf('[%s] error in %s at line %s with message: %s', get_class($throwable), $throwable->getFile(), $throwable->getLine(), $throwable->getMessage());
         if (!$app['debug']) {
             error_log($msg);
             $msg = '';
         }
         $event->setResponse(new Response($msg, Response::HTTP_INTERNAL_SERVER_ERROR));
     }, BroadcasterInterface::RECEIVER_LOW_PRIORITY);
     $app->on(BroadcasterInterface::CONTROLLER_EVENT, function (ControllerEvent $event) use($app) : void {
         $finalArgs = [];
         $rawArgs = $event->arguments();
         $refMethod = new \ReflectionMethod($event->callback(), '__invoke');
         foreach ($refMethod->getParameters() as $refParam) {
             if (null !== ($refClass = $refParam->getClass())) {
                 if (isset($app[$refClass->getName()])) {
                     $finalArgs[$refParam->getPosition()] = $app[$refClass->getName()];
                     continue;
                 }
             }
             if (in_array($refParam->name, array_keys($rawArgs))) {
                 $finalArgs[$refParam->getPosition()] = $rawArgs[$refParam->name];
             }
         }
         $event->setArguments($finalArgs);
     }, BroadcasterInterface::RECEIVER_LOW_PRIORITY);
 }
Esempio n. 2
0
 public function testBroadcastTerminateEventOnDestruct()
 {
     $app = new Jarvis();
     $receiver = new FakeReceiver();
     $app->on(BroadcasterInterface::TERMINATE_EVENT, [$receiver, 'onEventBroadcast']);
     $this->assertNull($receiver->event);
     unset($app);
     gc_collect_cycles();
     $this->assertNotNull($receiver->event);
     $this->assertInstanceOf(SimpleEvent::class, $receiver->event);
 }
 public function testPermanentEvent()
 {
     $app = new Jarvis();
     $receiver = new FakeReceiver();
     $name = 'classic.event';
     $simpleEvent = new SimpleEvent();
     $this->assertNull($receiver->event);
     $app->broadcast($name, $simpleEvent);
     $app->on($name, [$receiver, 'onEventBroadcast']);
     $this->assertNull($receiver->event);
     $name = 'permanent.event';
     $permanentEvent = new PermanentEvent();
     $app->broadcast($name, $permanentEvent);
     $app->on($name, [$receiver, 'onEventBroadcast']);
     $this->assertSame($permanentEvent, $receiver->event);
 }