예제 #1
0
 /**
  * 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');
     });
 }
예제 #2
0
파일: Auth.php 프로젝트: 4nxiety/pagekit
 /**
  * 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();
 }
예제 #3
0
 /**
  * {@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);
 }
예제 #4
0
 /**
  * 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]);
         }
     }
 }
예제 #5
0
 /**
  * {@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;
 }
예제 #6
0
 /**
  * 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;
     }
 }
예제 #7
0
 /**
  * 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);
 }
예제 #8
0
 /**
  * Adds a route.
  *
  * @param Route $route
  */
 protected function addRoute($route)
 {
     $this->routes->add($route->getName(), $route);
     $this->events->trigger('route.configure', [$route, $this->routes]);
 }
예제 #9
0
 /**
  * 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);
 }
예제 #10
0
 /**
  * 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();
 }