ICanBoogie/HTTP v2.6.0
  • Namespace
  • Class

Namespaces

  • ICanBoogie
    • Exception
    • HTTP
      • Headers
      • Request
      • RequestDispatcher

Classes

  • CallableDispatcher
  • DispatcherProvider
  • File
  • FileInfo
  • FileList
  • FileResponse
  • Headers
  • ProvideDispatcher
  • RedirectResponse
  • Request
  • RequestDispatcher
  • RequestOptionsMapper
  • RequestRange
  • Response
  • Status
  • WeightedDispatcher

Interfaces

  • Dispatcher
  • Exception
  • FileOptions
  • RequestMethods
  • RequestOptions
  • ResponseStatus
  • SecurityError

Exceptions

  • AuthenticationRequired
  • ClientError
  • DispatcherNotDefined
  • DispatcherProviderNotDefined
  • ForceRedirect
  • MethodNotSupported
  • NotFound
  • PermissionRequired
  • ServerError
  • ServiceUnavailable
  • StatusCodeNotValid

Functions

  • dispatch
  • get_dispatcher
  • get_initial_request
 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 
<?php

/*
 * This file is part of the ICanBoogie package.
 *
 * (c) Olivier Laviale <olivier.laviale@gmail.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace ICanBoogie\HTTP;

/**
 * Maps options to the environment.
 */
class RequestOptionsMapper implements RequestOptions
{
    /**
     * Maps options to environment.
     *
     * The options mapped to the environment are removed from the `$options` array.
     *
     * @param array $options Reference to the options.
     * @param array $env Reference to the environment.
     *
     * @throws \InvalidArgumentException on invalid option.
     */
    public function map(array &$options, array &$env)
    {
        $mappers = $this->get_mappers();

        foreach ($options as $option => &$value)
        {
            if (empty($mappers[$option]))
            {
                throw new \InvalidArgumentException("Option not supported: `$option`.");
            }

            $value = $mappers[$option]($value, $env);

            if ($value === null)
            {
                unset($options[$option]);
            }
        }
    }

    /**
     * Returns request properties mappers.
     *
     * @return \Closure[]
     */
    protected function get_mappers()
    {
        return [

            self::OPTION_PATH_PARAMS =>    function($value) { return $value; },
            self::OPTION_QUERY_PARAMS =>   function($value) { return $value; },
            self::OPTION_REQUEST_PARAMS => function($value) { return $value; },
            self::OPTION_COOKIE =>         function($value) { return $value; },
            self::OPTION_FILES =>          function($value) { return $value; },
            self::OPTION_HEADERS =>        function($value) { return ($value instanceof Headers) ? $value : new Headers($value); },

            self::OPTION_CACHE_CONTROL =>  function($value, array &$env) { $env['HTTP_CACHE_CONTROL'] = $value; },
            self::OPTION_CONTENT_LENGTH => function($value, array &$env) { $env['CONTENT_LENGTH'] = $value; },
            self::OPTION_IP =>             function($value, array &$env) { if ($value) $env['REMOTE_ADDR'] = $value; },
            self::OPTION_IS_LOCAL =>       function($value, array &$env) { if ($value) $env['REMOTE_ADDR'] = '::1'; },
            self::OPTION_IS_DELETE =>      function($value, array &$env) { if ($value) $env['REQUEST_METHOD'] = Request::METHOD_DELETE; },
            self::OPTION_IS_CONNECT =>     function($value, array &$env) { if ($value) $env['REQUEST_METHOD'] = Request::METHOD_CONNECT; },
            self::OPTION_IS_GET =>         function($value, array &$env) { if ($value) $env['REQUEST_METHOD'] = Request::METHOD_GET; },
            self::OPTION_IS_HEAD =>        function($value, array &$env) { if ($value) $env['REQUEST_METHOD'] = Request::METHOD_HEAD; },
            self::OPTION_IS_OPTIONS =>     function($value, array &$env) { if ($value) $env['REQUEST_METHOD'] = Request::METHOD_OPTIONS; },
            self::OPTION_IS_PATCH =>       function($value, array &$env) { if ($value) $env['REQUEST_METHOD'] = Request::METHOD_PATCH; },
            self::OPTION_IS_POST =>        function($value, array &$env) { if ($value) $env['REQUEST_METHOD'] = Request::METHOD_POST; },
            self::OPTION_IS_PUT =>         function($value, array &$env) { if ($value) $env['REQUEST_METHOD'] = Request::METHOD_PUT; },
            self::OPTION_IS_TRACE =>       function($value, array &$env) { if ($value) $env['REQUEST_METHOD'] = Request::METHOD_TRACE; },
            self::OPTION_IS_XHR =>         function($value, array &$env) { if ($value) $env['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest'; else unset($env['HTTP_X_REQUESTED_WITH']); },
            self::OPTION_METHOD =>         function($value, array &$env) { if ($value) $env['REQUEST_METHOD'] = $value; },
            self::OPTION_PATH =>           function($value, array &$env) { $env['REQUEST_URI'] = $value; }, // TODO-20130521: handle query string
            self::OPTION_REFERER =>        function($value, array &$env) { $env['HTTP_REFERER'] = $value; },
            self::OPTION_URI =>            function($value, array &$env) { $env['REQUEST_URI'] = $value; $qs = strpos($value, '?'); $env['QUERY_STRING'] = $qs === false ? '' : substr($value, $qs + 1); },
            self::OPTION_USER_AGENT =>     function($value, array &$env) { $env['HTTP_USER_AGENT'] = $value; }

        ];
    }
}
ICanBoogie/HTTP v2.6.0 API documentation generated by ApiGen