/** * Merges one header values into another * @param \Nimbles\Core\Http\Header $header * @return void * @throws \Nimbles\Http\Header\Exception\InvalidHeaderName */ public function merge(Header $header) { if ($this->getName() !== $header->getName()) { throw new Header\Exception\InvalidHeaderName('Cannot merge headers of different name'); } $values = $header->getValue(); // for header to create an array foreach ($header->_values as $value) { $this->setValue($value, true); } }
/** * Sets a header * * @param string|\Nimbles\Http\Header $name * @param string|\Nimbles\Http\Header|array|null $value * @param bool $append * @return \Nimbles\Http\Header\Collection */ public function setHeader($name, $value = null, $append = false) { $append = (bool) $append; if (is_array($name) || $name instanceof \ArrayObject) { foreach ($name as $index => $header) { if (is_string($index)) { $this->setHeader($index, $header); } else { $this->setHeader($header); } } } else { if ($name instanceof Header) { $header = $name; $name = $header->getName(); if ($append && $this->offsetExists($name)) { $this[$name]->merge($header); } else { $this[$name] = $header; } } else { if (is_string($name)) { if ($value instanceof Header) { $name = $value->getName(); // sync to the headers name $value = $value->getValue(); // converts to null, string or array } if (is_string($value) || null === $value) { $value = array($value); } foreach ($value as $string) { $header = Header::factory($name, $string); $name = $header->getName(); if ($append && array_key_exists($name, $this)) { $this[$name]->merge($header); } else { $this[$name] = $header; } } } } } return $this; }