PHPixie/HTTP

View on GitHub
src/PHPixie/HTTP/Data/Headers/Editable.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace PHPixie\HTTP\Data\Headers;

/**
 * Editable header storage
 */
class Editable extends \PHPixie\HTTP\Data\Headers
{
    /**
     * Set header replacing all headers with the same name
     * @param string $name
     * @param string|array $value
     */
    public function set($name, $value)
    {
        $value = $this->normalizeValue($value);
        
        $this->remove($name);
        $this->setHeader($name, $value);
    }

    /**
     * Add header value
     * @param string $name
     * @param string|array $value
     */
    public function add($name, $value)
    {
        $this->requireNames();
        $value = $this->normalizeValue($value);
        
        $lower = strtolower($name);
        if(array_key_exists($lower, $this->names)) {
            $name = $this->names[$lower];
            foreach($value as $line) {
                $this->headers[$name][] = $line;
            }
        }else{
            $this->setHeader($name, $value);
        }
    }

    /**
     * Remove all header values
     * @param string $name
     */
    public function remove($name)
    {
        $this->requireNames();
        
        $lower = strtolower($name);
        if(array_key_exists($lower, $this->names)) {
            $name = $this->names[$lower];
            unset($this->names[$lower]);
            unset($this->headers[$name]);
        }
    }

    /**
     * @param string $name
     * @param array $value
     */
    protected function setHeader($name, $value)
    {
        $this->headers[$name] = $value;
        $this->names[strtolower($name)] = $name;
    }
}