You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
177 lines
3.3 KiB
177 lines
3.3 KiB
<?php |
|
|
|
/* |
|
* This file is part of the Symfony package. |
|
* |
|
* (c) Fabien Potencier <fabien@symfony.com> |
|
* |
|
* For the full copyright and license information, please view the LICENSE |
|
* file that was distributed with this source code. |
|
*/ |
|
|
|
namespace Symfony\Component\HttpFoundation; |
|
|
|
/** |
|
* Represents an Accept-* header item. |
|
* |
|
* @author Jean-François Simon <contact@jfsimon.fr> |
|
*/ |
|
class AcceptHeaderItem |
|
{ |
|
private $value; |
|
private $quality = 1.0; |
|
private $index = 0; |
|
private $attributes = []; |
|
|
|
public function __construct(string $value, array $attributes = []) |
|
{ |
|
$this->value = $value; |
|
foreach ($attributes as $name => $value) { |
|
$this->setAttribute($name, $value); |
|
} |
|
} |
|
|
|
/** |
|
* Builds an AcceptHeaderInstance instance from a string. |
|
* |
|
* @return self |
|
*/ |
|
public static function fromString(?string $itemValue) |
|
{ |
|
$parts = HeaderUtils::split($itemValue ?? '', ';='); |
|
|
|
$part = array_shift($parts); |
|
$attributes = HeaderUtils::combine($parts); |
|
|
|
return new self($part[0], $attributes); |
|
} |
|
|
|
/** |
|
* Returns header value's string representation. |
|
* |
|
* @return string |
|
*/ |
|
public function __toString() |
|
{ |
|
$string = $this->value.($this->quality < 1 ? ';q='.$this->quality : ''); |
|
if (\count($this->attributes) > 0) { |
|
$string .= '; '.HeaderUtils::toString($this->attributes, ';'); |
|
} |
|
|
|
return $string; |
|
} |
|
|
|
/** |
|
* Set the item value. |
|
* |
|
* @return $this |
|
*/ |
|
public function setValue(string $value) |
|
{ |
|
$this->value = $value; |
|
|
|
return $this; |
|
} |
|
|
|
/** |
|
* Returns the item value. |
|
* |
|
* @return string |
|
*/ |
|
public function getValue() |
|
{ |
|
return $this->value; |
|
} |
|
|
|
/** |
|
* Set the item quality. |
|
* |
|
* @return $this |
|
*/ |
|
public function setQuality(float $quality) |
|
{ |
|
$this->quality = $quality; |
|
|
|
return $this; |
|
} |
|
|
|
/** |
|
* Returns the item quality. |
|
* |
|
* @return float |
|
*/ |
|
public function getQuality() |
|
{ |
|
return $this->quality; |
|
} |
|
|
|
/** |
|
* Set the item index. |
|
* |
|
* @return $this |
|
*/ |
|
public function setIndex(int $index) |
|
{ |
|
$this->index = $index; |
|
|
|
return $this; |
|
} |
|
|
|
/** |
|
* Returns the item index. |
|
* |
|
* @return int |
|
*/ |
|
public function getIndex() |
|
{ |
|
return $this->index; |
|
} |
|
|
|
/** |
|
* Tests if an attribute exists. |
|
* |
|
* @return bool |
|
*/ |
|
public function hasAttribute(string $name) |
|
{ |
|
return isset($this->attributes[$name]); |
|
} |
|
|
|
/** |
|
* Returns an attribute by its name. |
|
* |
|
* @param mixed $default |
|
* |
|
* @return mixed |
|
*/ |
|
public function getAttribute(string $name, $default = null) |
|
{ |
|
return $this->attributes[$name] ?? $default; |
|
} |
|
|
|
/** |
|
* Returns all attributes. |
|
* |
|
* @return array |
|
*/ |
|
public function getAttributes() |
|
{ |
|
return $this->attributes; |
|
} |
|
|
|
/** |
|
* Set an attribute. |
|
* |
|
* @return $this |
|
*/ |
|
public function setAttribute(string $name, string $value) |
|
{ |
|
if ('q' === $name) { |
|
$this->quality = (float) $value; |
|
} else { |
|
$this->attributes[$name] = $value; |
|
} |
|
|
|
return $this; |
|
} |
|
}
|
|
|