Overview

Namespaces

  • Composer
    • Autoload
  • Guzzle
    • Common
      • Exception
    • Http
      • Curl
      • Exception
      • Message
        • Header
      • QueryAggregator
    • Parser
      • Cookie
      • Message
      • UriTemplate
      • Url
    • Plugin
      • Mock
    • Stream
  • Mockery
    • Adapter
      • Phpunit
    • CountValidator
    • Exception
    • Generator
      • StringManipulation
        • Pass
    • Loader
    • Matcher
  • None
  • Omnipay
    • Common
      • Exception
      • Message
    • Dummy
      • Message
    • Fatzebra
      • Message
  • PHP
  • Symfony
    • Component
      • EventDispatcher
        • Debug
        • DependencyInjection
        • Tests
          • Debug
          • DependencyInjection
      • HttpFoundation
        • File
          • Exception
          • MimeType
        • Session
          • Attribute
          • Flash
          • Storage
            • Handler
            • Proxy
        • Tests
          • File
            • MimeType
          • Session
            • Attribute
            • Flash
            • Storage
              • Handler
              • Proxy
      • Yaml
        • Exception
        • Tests

Classes

  • Symfony\Component\Yaml\Tests\A
  • Symfony\Component\Yaml\Tests\B
  • Symfony\Component\Yaml\Tests\DumperTest
  • Symfony\Component\Yaml\Tests\InlineTest
  • Symfony\Component\Yaml\Tests\ParseExceptionTest
  • Symfony\Component\Yaml\Tests\ParserTest
  • Symfony\Component\Yaml\Tests\YamlTest
  • Overview
  • Namespace
  • Function
  • Tree
  1: <?php
  2: 
  3: /*
  4:  * This file is part of the Symfony package.
  5:  *
  6:  * (c) Fabien Potencier <fabien@symfony.com>
  7:  *
  8:  * For the full copyright and license information, please view the LICENSE
  9:  * file that was distributed with this source code.
 10:  */
 11: 
 12: namespace Symfony\Component\HttpFoundation;
 13: 
 14: /**
 15:  * Represents an Accept-* header.
 16:  *
 17:  * An accept header is compound with a list of items,
 18:  * sorted by descending quality.
 19:  *
 20:  * @author Jean-François Simon <contact@jfsimon.fr>
 21:  */
 22: class AcceptHeader
 23: {
 24:     /**
 25:      * @var AcceptHeaderItem[]
 26:      */
 27:     private $items = array();
 28: 
 29:     /**
 30:      * @var bool
 31:      */
 32:     private $sorted = true;
 33: 
 34:     /**
 35:      * Constructor.
 36:      *
 37:      * @param AcceptHeaderItem[] $items
 38:      */
 39:     public function __construct(array $items)
 40:     {
 41:         foreach ($items as $item) {
 42:             $this->add($item);
 43:         }
 44:     }
 45: 
 46:     /**
 47:      * Builds an AcceptHeader instance from a string.
 48:      *
 49:      * @param string $headerValue
 50:      *
 51:      * @return AcceptHeader
 52:      */
 53:     public static function fromString($headerValue)
 54:     {
 55:         $index = 0;
 56: 
 57:         return new self(array_map(function ($itemValue) use (&$index) {
 58:             $item = AcceptHeaderItem::fromString($itemValue);
 59:             $item->setIndex($index++);
 60: 
 61:             return $item;
 62:         }, preg_split('/\s*(?:,*("[^"]+"),*|,*(\'[^\']+\'),*|,+)\s*/', $headerValue, 0, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE)));
 63:     }
 64: 
 65:     /**
 66:      * Returns header value's string representation.
 67:      *
 68:      * @return string
 69:      */
 70:     public function __toString()
 71:     {
 72:         return implode(',', $this->items);
 73:     }
 74: 
 75:     /**
 76:      * Tests if header has given value.
 77:      *
 78:      * @param string $value
 79:      *
 80:      * @return bool
 81:      */
 82:     public function has($value)
 83:     {
 84:         return isset($this->items[$value]);
 85:     }
 86: 
 87:     /**
 88:      * Returns given value's item, if exists.
 89:      *
 90:      * @param string $value
 91:      *
 92:      * @return AcceptHeaderItem|null
 93:      */
 94:     public function get($value)
 95:     {
 96:         return isset($this->items[$value]) ? $this->items[$value] : null;
 97:     }
 98: 
 99:     /**
100:      * Adds an item.
101:      *
102:      * @param AcceptHeaderItem $item
103:      *
104:      * @return AcceptHeader
105:      */
106:     public function add(AcceptHeaderItem $item)
107:     {
108:         $this->items[$item->getValue()] = $item;
109:         $this->sorted = false;
110: 
111:         return $this;
112:     }
113: 
114:     /**
115:      * Returns all items.
116:      *
117:      * @return AcceptHeaderItem[]
118:      */
119:     public function all()
120:     {
121:         $this->sort();
122: 
123:         return $this->items;
124:     }
125: 
126:     /**
127:      * Filters items on their value using given regex.
128:      *
129:      * @param string $pattern
130:      *
131:      * @return AcceptHeader
132:      */
133:     public function filter($pattern)
134:     {
135:         return new self(array_filter($this->items, function (AcceptHeaderItem $item) use ($pattern) {
136:             return preg_match($pattern, $item->getValue());
137:         }));
138:     }
139: 
140:     /**
141:      * Returns first item.
142:      *
143:      * @return AcceptHeaderItem|null
144:      */
145:     public function first()
146:     {
147:         $this->sort();
148: 
149:         return !empty($this->items) ? reset($this->items) : null;
150:     }
151: 
152:     /**
153:      * Sorts items by descending quality.
154:      */
155:     private function sort()
156:     {
157:         if (!$this->sorted) {
158:             uasort($this->items, function ($a, $b) {
159:                 $qA = $a->getQuality();
160:                 $qB = $b->getQuality();
161: 
162:                 if ($qA === $qB) {
163:                     return $a->getIndex() > $b->getIndex() ? 1 : -1;
164:                 }
165: 
166:                 return $qA > $qB ? -1 : 1;
167:             });
168: 
169:             $this->sorted = true;
170:         }
171:     }
172: }
173: 
Omnipay Fat Zebra / Paystream Gateway Module API Documentation API documentation generated by ApiGen