192 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			192 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			PHP
		
	
	
|  | <?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. | ||
|  |      * | ||
|  |      * @param string $itemValue | ||
|  |      * | ||
|  |      * @return self | ||
|  |      */ | ||
|  |     public static function fromString($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. | ||
|  |      * | ||
|  |      * @param string $value | ||
|  |      * | ||
|  |      * @return $this | ||
|  |      */ | ||
|  |     public function setValue($value) | ||
|  |     { | ||
|  |         $this->value = $value; | ||
|  | 
 | ||
|  |         return $this; | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Returns the item value. | ||
|  |      * | ||
|  |      * @return string | ||
|  |      */ | ||
|  |     public function getValue() | ||
|  |     { | ||
|  |         return $this->value; | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Set the item quality. | ||
|  |      * | ||
|  |      * @param float $quality | ||
|  |      * | ||
|  |      * @return $this | ||
|  |      */ | ||
|  |     public function setQuality($quality) | ||
|  |     { | ||
|  |         $this->quality = $quality; | ||
|  | 
 | ||
|  |         return $this; | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Returns the item quality. | ||
|  |      * | ||
|  |      * @return float | ||
|  |      */ | ||
|  |     public function getQuality() | ||
|  |     { | ||
|  |         return $this->quality; | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Set the item index. | ||
|  |      * | ||
|  |      * @param int $index | ||
|  |      * | ||
|  |      * @return $this | ||
|  |      */ | ||
|  |     public function setIndex($index) | ||
|  |     { | ||
|  |         $this->index = $index; | ||
|  | 
 | ||
|  |         return $this; | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Returns the item index. | ||
|  |      * | ||
|  |      * @return int | ||
|  |      */ | ||
|  |     public function getIndex() | ||
|  |     { | ||
|  |         return $this->index; | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Tests if an attribute exists. | ||
|  |      * | ||
|  |      * @param string $name | ||
|  |      * | ||
|  |      * @return bool | ||
|  |      */ | ||
|  |     public function hasAttribute($name) | ||
|  |     { | ||
|  |         return isset($this->attributes[$name]); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Returns an attribute by its name. | ||
|  |      * | ||
|  |      * @param string $name | ||
|  |      * @param mixed  $default | ||
|  |      * | ||
|  |      * @return mixed | ||
|  |      */ | ||
|  |     public function getAttribute($name, $default = null) | ||
|  |     { | ||
|  |         return $this->attributes[$name] ?? $default; | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Returns all attributes. | ||
|  |      * | ||
|  |      * @return array | ||
|  |      */ | ||
|  |     public function getAttributes() | ||
|  |     { | ||
|  |         return $this->attributes; | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Set an attribute. | ||
|  |      * | ||
|  |      * @param string $name | ||
|  |      * @param string $value | ||
|  |      * | ||
|  |      * @return $this | ||
|  |      */ | ||
|  |     public function setAttribute($name, $value) | ||
|  |     { | ||
|  |         if ('q' === $name) { | ||
|  |             $this->quality = (float) $value; | ||
|  |         } else { | ||
|  |             $this->attributes[$name] = (string) $value; | ||
|  |         } | ||
|  | 
 | ||
|  |         return $this; | ||
|  |     } | ||
|  | } |