Example #1
0
 /**
  * @param BaseRouter|Router $router
  * @param BaseContext|Context $context
  * @param BaseRoute|Route $route
  * @return bool
  */
 public function pass(BaseRouter $router, BaseContext $context, BaseRoute $route) : bool
 {
     $values = $router->extract($context, $route);
     if ($this->doBind) {
         $values = $router->bind($values, $route->getBindings());
     }
     $arguments = $router->buildArguments($this->callback, $values, $this->doBind);
     $callback = $this->callback;
     return $callback(...$arguments);
 }
Example #2
0
 /**
  * @param Context $context
  * @param Route $route
  * @param Router $router
  * @return bool
  */
 public function pass(Router $router, Context $context, Route $route) : bool
 {
     $filter = $route->get('filter');
     if (!is_callable($filter)) {
         return true;
     }
     $values = $router->extract($context, $route);
     $bindings = $router->bind($values, $route->getBindings());
     $arguments = $router->buildArguments($filter, $bindings);
     return $filter(...$arguments);
 }
Example #3
0
 /**
  * Dispatch an event
  * 
  * @param   Event   $event  Event
  * 
  * @return  Event
  */
 public function dispatch(Event $event) : Event
 {
     $this->collection->sort();
     /** @var Route $handler */
     foreach ($this->router->match($event) as $handler) {
         $callback = $handler->getAction();
         $callback($event);
         if ($event->canceled()) {
             break;
         }
     }
     return $event;
 }
Example #4
0
 /**
  * @param BaseRouter|Router $router
  * @param BaseContext|Context $context
  * @param BaseRoute|Route $route
  * @return bool
  */
 public function pass(BaseRouter $router, BaseContext $context, BaseRoute $route) : bool
 {
     /** @var CallbackFilter[] $filters */
     $filters = $route->get('filters', []) + $router->getRouteCollection()->getFilters();
     foreach ($route->get('before', []) as $name) {
         if (isset($filters[$name])) {
             if ($filters[$name]->setBindMode(false)->pass($router, $context, $route) === false) {
                 return false;
             }
         }
     }
     return true;
 }
Example #5
0
 /**
  * Route path
  * 
  * @param   \Opis\HttpRouting\Path  $path
  * 
  * @return  mixed
  */
 public function route(BasePath $path)
 {
     $router = new AliasRouter($this->app->collect('RouteAliases'));
     $alias = $router->route(new AliasPath($path->path()));
     if ($alias !== null) {
         $path = new Path((string) $alias, $path->domain(), $path->method(), $path->isSecure(), $path->request());
     }
     $this->path = $path;
     $result = parent::route($path);
     $response = $path->request()->response();
     $response->body($result);
     $response->send();
     return $result;
 }
Example #6
0
 /**
  * Route path
  *
  * @param BaseContext|Context $context
  * @return mixed
  */
 public function route(BaseContext $context)
 {
     $this->currentPath = $context;
     $router = new AliasRouter(app()->getCollector()->getRouteAliases());
     $alias = $router->route(new BaseContext($context->path()));
     if ($alias !== false) {
         $context = new Context((string) $alias, $context->domain(), $context->method(), $context->isSecure(), $context->request());
     }
     $result = parent::route($context);
     /** @var \Opis\Http\Request $request */
     $request = $context->request();
     /** @var \Opis\Http\Response $response */
     $response = $request->response();
     $response->body($result);
     $response->send();
     return $result;
 }
Example #7
0
 /**
  * @param BaseRouter|BaseRouter $router
  * @param BaseContext|Context $context
  * @param BaseRoute|Route $route
  * @return bool
  */
 public function pass(BaseRouter $router, BaseContext $context, BaseRoute $route) : bool
 {
     //match secure
     if (null !== ($secure = $route->get('secure'))) {
         if ($secure !== $context->isSecure()) {
             return false;
         }
     }
     //match method
     if (!in_array($context->method(), $route->get('method', ['GET']))) {
         return false;
     }
     // match domain
     if (null !== ($domain = $route->get('domain'))) {
         $regex = $router->getRouteCollection()->getDomainCompiler()->getRegex($domain, $route->getWildcards());
         return preg_match($regex, $context->domain());
     }
     return true;
 }
Example #8
0
 /**
  * Router constructor.
  * @param RouteCollection $routes
  * @param DispatcherResolver|null $resolver
  * @param FilterCollection|null $filters
  * @param array $specials
  */
 public function __construct(RouteCollection $routes, DispatcherResolver $resolver = null, FilterCollection $filters = null, array $specials = [])
 {
     if ($resolver === null) {
         $resolver = new DispatcherResolver();
     }
     if ($filters === null) {
         $filters = new FilterCollection();
         $filters->addFilter(new RequestFilter())->addFilter(new UserFilter());
     }
     parent::__construct($routes, $resolver, $filters, $specials);
 }