class AcceptHeader
Represents an Accept-* header.
An accept header is compound with a list of items, sorted by descending quality.
@author Jean-François Simon <contact@jfsimon.fr>
Hierarchy
- class \Symfony\Component\HttpFoundation\AcceptHeader
Expanded class hierarchy of AcceptHeader
File
-
vendor/
symfony/ http-foundation/ AcceptHeader.php, line 25
Namespace
Symfony\Component\HttpFoundationView source
class AcceptHeader {
/**
* @var AcceptHeaderItem[]
*/
private array $items = [];
private bool $sorted = true;
/**
* @param AcceptHeaderItem[] $items
*/
public function __construct(array $items) {
foreach ($items as $item) {
$this->add($item);
}
}
/**
* Builds an AcceptHeader instance from a string.
*/
public static function fromString(?string $headerValue) : self {
$parts = HeaderUtils::split($headerValue ?? '', ',;=');
return new self(array_map(function ($subParts) {
static $index = 0;
$part = array_shift($subParts);
$attributes = HeaderUtils::combine($subParts);
$item = new AcceptHeaderItem($part[0], $attributes);
$item->setIndex($index++);
return $item;
}, $parts));
}
/**
* Returns header value's string representation.
*/
public function __toString() : string {
return implode(',', $this->items);
}
/**
* Tests if header has given value.
*/
public function has(string $value) : bool {
return isset($this->items[$value]);
}
/**
* Returns given value's item, if exists.
*/
public function get(string $value) : ?AcceptHeaderItem {
return $this->items[$value] ?? $this->items[explode('/', $value)[0] . '/*'] ?? $this->items['*/*'] ?? $this->items['*'] ?? null;
}
/**
* Adds an item.
*
* @return $this
*/
public function add(AcceptHeaderItem $item) : static {
$this->items[$item->getValue()] = $item;
$this->sorted = false;
return $this;
}
/**
* Returns all items.
*
* @return AcceptHeaderItem[]
*/
public function all() : array {
$this->sort();
return $this->items;
}
/**
* Filters items on their value using given regex.
*/
public function filter(string $pattern) : self {
return new self(array_filter($this->items, fn(AcceptHeaderItem $item) => preg_match($pattern, $item->getValue())));
}
/**
* Returns first item.
*/
public function first() : ?AcceptHeaderItem {
$this->sort();
return $this->items ? reset($this->items) : null;
}
/**
* Sorts items by descending quality.
*/
private function sort() : void {
if (!$this->sorted) {
uasort($this->items, function (AcceptHeaderItem $a, AcceptHeaderItem $b) {
$qA = $a->getQuality();
$qB = $b->getQuality();
if ($qA === $qB) {
return $a->getIndex() > $b->getIndex() ? 1 : -1;
}
return $qA > $qB ? -1 : 1;
});
$this->sorted = true;
}
}
}
Members
Title Sort descending | Modifiers | Object type | Summary |
---|---|---|---|
AcceptHeader::$items | private | property | |
AcceptHeader::$sorted | private | property | |
AcceptHeader::add | public | function | Adds an item. |
AcceptHeader::all | public | function | Returns all items. |
AcceptHeader::filter | public | function | Filters items on their value using given regex. |
AcceptHeader::first | public | function | Returns first item. |
AcceptHeader::fromString | public static | function | Builds an AcceptHeader instance from a string. |
AcceptHeader::get | public | function | Returns given value's item, if exists. |
AcceptHeader::has | public | function | Tests if header has given value. |
AcceptHeader::sort | private | function | Sorts items by descending quality. |
AcceptHeader::__construct | public | function | |
AcceptHeader::__toString | public | function | Returns header value's string representation. |