/** * Constructor. * * @param Router $router * @param EventDispatcherInterface $events * @param string $cache * @param string $file */ public function __construct(Router $router, EventDispatcherInterface $events, $cache, $file = '%s.cache') { $this->router = $router; $this->cache = $cache; $this->file = $file; $events->on('request', function ($event, $request) { $this->route = $request->attributes->get('_route'); }); }
/** * Logs the current user out. * * @return Response */ public function logout() { $event = $this->events->trigger(new LogoutEvent(AuthEvents::LOGOUT, $this->user)); $this->user = null; $this->session->invalidate(); return $event->getResponse(); }
/** * {@inheritdoc} */ public function register(View $view) { $view->on('render', function ($event) { $name = $event->getTemplate(); if (isset($this->placeholder[$name])) { $this->deferred[$name] = clone $event; $event->setResult($this->placeholder[$name]); $event->stopPropagation(); } }, 15); $this->events->on('response', function ($e, $request, $response) use($view) { foreach ($this->deferred as $name => $event) { $view->trigger($event->setName($name), [$view]); $response->setContent(str_replace($this->placeholder[$name], $event->getResult(), $response->getContent())); } }, 10); }
/** * Subscribes model lifecycle callbacks. * * @param Metadata $metadata */ protected function subscribe(Metadata $metadata) { foreach ($metadata->getEvents() as $event => $methods) { foreach ($methods as $method) { $this->events->on($metadata->getEventPrefix() . '.' . $event, [$metadata->getClass(), $method]); } } }
/** * {@inheritdoc} */ public function render($name, array $parameters = []) { $event = new ViewEvent('render', $name); $event->setParameters(array_replace($this->globals, end($this->parameters) ?: [], $parameters)); $this->events->trigger($event, [$this]); if (!$event->isPropagationStopped()) { $name = preg_replace('/\\.php$/i', '', $name); $this->events->trigger($event->setName($name), [$this]); } $result = $event->getResult(); $params = $this->parameters[] = $event->getParameters(); if ($result === null && $this->engine->supports($event->getTemplate())) { $result = $this->engine->render($event->getTemplate(), array_replace(['params' => new ArrObject($params)], $params)); } array_pop($this->parameters); return $result; }
/** * Handles the exception event. * * @param \Exception $e * @return Response * @throws \Exception */ protected function handleException(\Exception $e) { $event = new ExceptionEvent('exception', $this, $e); $this->events->trigger($event, [$this->getRequest()]); $e = $event->getException(); if (!$event->hasResponse()) { throw $e; } $response = $event->getResponse(); if (!$response->isClientError() && !$response->isServerError() && !$response->isRedirect()) { if ($e instanceof HttpException) { $response->setStatusCode($e->getCode()); } else { $response->setStatusCode(500); } } try { return $this->handleResponse($response); } catch (\Exception $e) { return $response; } }
/** * Dispatches an event to all registered listeners. * * @param string $name * @param Metadata $metadata * @param array $arguments * @return bool */ public function trigger($name, Metadata $metadata, array $arguments) { $this->events->trigger("{$metadata->getEventPrefix()}.{$name}", $arguments); }
/** * Adds a route. * * @param Route $route */ protected function addRoute($route) { $this->routes->add($route->getName(), $route); $this->events->trigger('route.configure', [$route, $this->routes]); }
/** * Sets a callback to act after a route is executed. * * @param string $name * @param callable $callback * @param int $priority */ public function after($name, $callback, $priority) { $this->events->on('after' . $name, $callback, $priority); }
/** * Logs the current user out. * * @return Response */ public function logout() { $event = $this->events->trigger(new LogoutEvent(AuthEvents::LOGOUT, $this->getUser())); $this->removeUser(); return $event->getResponse(); }