public function bind($pattern, $options = [], $handler = null)
    {
        if (!is_array($options)) {
            $handler = $options;
            $options = [];
        }
        if (!$handler instanceof Closure && !method_exists($handler, '__invoke')) {
            throw new RouterException("The handler needs to be an instance of `Closure` or implements the `__invoke()` magic method.");
        }

        if (isset($options['method'])) {
            throw new RouterException("Use the `'methods'` option to limit HTTP verbs on a route binding definition.");
        }

        $scope = end($this->_scopes);
        $options = $scope->scopify($options);
        $options['pattern'] = $pattern;
        $options['handler'] = $handler;
        $options['scope'] = $scope;

        $scheme = $options['scheme'];
        $host = $options['host'];

        if (isset($this->_hosts[$scheme][$host])) {
            $options['host'] = $this->_hosts[$scheme][$host];
        }

        if (isset($this->_pattern[$scheme][$host][$pattern])) {
            $instance = $this->_pattern[$scheme][$host][$pattern];
        } else {
            $route = $this->_classes['route'];
            $instance = new $route($options);
            $this->_hosts[$scheme][$host] = $instance->host();
        }

        if (!isset($this->_pattern[$scheme][$host][$pattern])) {
            $this->_pattern[$scheme][$host][$pattern] = $instance;
        }

        $methods = $options['methods'] ? (array) $options['methods'] : [];

        $instance->allow($methods);

        foreach ($methods as $method) {
            $this->_routes[$scheme][$host][strtoupper($method)][] = $instance;
        }

        if (isset($options['name'])) {
            $this->_data[$options['name']] = $instance;
        }
        return $instance;
    }
public function bind($pattern, $options = [], $handler = null)
    {
        if (!is_array($options)) {
            $handler = $options;
            $options = [];
        }
        if (!$handler instanceof Closure && !method_exists($handler, '__invoke')) {
            throw new RouterException("The handler needs to be an instance of `Closure` or implements the `__invoke()` magic method.");
        }

        if (isset($options['method'])) {
            throw new RouterException("Use the `'methods'` option to limit HTTP verbs on a route binding definition.");
        }

        $scope = end($this->_scopes);
        $options = $scope->scopify($options);
        $options['pattern'] = $pattern;
        $options['handler'] = $handler;
        $options['scope'] = $scope;

        $scheme = $options['scheme'];
        $host = $options['host'];

        if (isset($this->_hosts[$scheme][$host])) {
            $options['host'] = $this->_hosts[$scheme][$host];
        }

        if (isset($this->_pattern[$scheme][$host][$pattern])) {
            $instance = $this->_pattern[$scheme][$host][$pattern];
        } else {
            $route = $this->_classes['route'];
            $instance = new $route($options);
            $this->_hosts[$scheme][$host] = $instance->host();
        }

        if (!isset($this->_pattern[$scheme][$host][$pattern])) {
            $this->_pattern[$scheme][$host][$pattern] = $instance;
        }

        $methods = $options['methods'] ? (array) $options['methods'] : [];

        $instance->allow($methods);

        foreach ($methods as $method) {
            $this->_routes[$scheme][$host][strtoupper($method)][] = $instance;
        }

        if (isset($options['name'])) {
            $this->_data[$options['name']] = $instance;
        }
        return $instance;
    }
public function bind ( $ pattern , $ options = [ ] , $ handler = null ) { if ( ! is_array ( $ options ) ) { $ handler = $ options ; $ options = [ ] ; } if ( ! $ handler instanceof Closure && ! method_exists ( $ handler , '__invoke' ) ) { throw new RouterException ( "The handler needs to be an instance of `Closure` or implements the `__invoke()` magic method." ) ; } if ( isset ( $ options [ 'method' ] ) ) { throw new RouterException ( "Use the `'methods'` option to limit HTTP verbs on a route binding definition." ) ; } $ scope = end ( $ this -> _scopes ) ; $ options = $ scope -> scopify ( $ options ) ; $ options [ 'pattern' ] = $ pattern ; $ options [ 'handler' ] = $ handler ; $ options [ 'scope' ] = $ scope ; $ scheme = $ options [ 'scheme' ] ; $ host = $ options [ 'host' ] ; if ( isset ( $ this -> _hosts [ $ scheme ] [ $ host ] ) ) { $ options [ 'host' ] = $ this -> _hosts [ $ scheme ] [ $ host ] ; } if ( isset ( $ this -> _pattern [ $ scheme ] [ $ host ] [ $ pattern ] ) ) { $ instance = $ this -> _pattern [ $ scheme ] [ $ host ] [ $ pattern ] ; } else { $ route = $ this -> _classes [ 'route' ] ; $ instance = new $ route ( $ options ) ; $ this -> _hosts [ $ scheme ] [ $ host ] = $ instance -> host ( ) ; } if ( ! isset ( $ this -> _pattern [ $ scheme ] [ $ host ] [ $ pattern ] ) ) { $ this -> _pattern [ $ scheme ] [ $ host ] [ $ pattern ] = $ instance ; } $ methods = $ options [ 'methods' ] ? ( array ) $ options [ 'methods' ] : [ ] ; $ instance -> allow ( $ methods ) ; foreach ( $ methods as $ method ) { $ this -> _routes [ $ scheme ] [ $ host ] [ strtoupper ( $ method ) ] [ ] = $ instance ; } if ( isset ( $ options [ 'name' ] ) ) { $ this -> _data [ $ options [ 'name' ] ] = $ instance ; } return $ instance ; }
Adds a route.

@param  string|array  $pattern The route's pattern.
@param  Closure|array $options An array of options or the callback handler.
@param  Closure|null  $handler The callback handler.
@return self
Adds a route .