Вход Регистрация
Файл: concrete5.7.5.6/concrete/vendor/zendframework/zend-http/src/Header/AbstractLocation.php
Строк: 170
<?php
/**
 * Zend Framework (http://framework.zend.com/)
 *
 * @link      http://github.com/zendframework/zf2 for the canonical source repository
 * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
 * @license   http://framework.zend.com/license/new-bsd New BSD License
 */

namespace ZendHttpHeader;

use 
ZendUriException as UriException;
use 
ZendUriUri;
use 
ZendUriUriFactory;
use 
ZendUriUriInterface;


/**
 * Abstract Location Header
 * Supports headers that have URI as value
 * @see ZendHttpHeaderLocation
 * @see ZendHttpHeaderContentLocation
 * @see ZendHttpHeaderReferer
 *
 * Note for 'Location' header:
 * While RFC 1945 requires an absolute URI, most of the browsers also support relative URI
 * This class allows relative URIs, and let user retrieve URI instance if strict validation needed
 */
abstract class AbstractLocation implements HeaderInterface
{
    
/**
     * URI for this header
     *
     * @var UriInterface
     */
    
protected $uri null;

    
/**
     * Create location-based header from string
     *
     * @param string $headerLine
     * @return AbstractLocation
     * @throws ExceptionInvalidArgumentException
     */
    
public static function fromString($headerLine)
    {
        
$locationHeader = new static();

        
// ZF-5520 - IIS bug, no space after colon
        
list($name$uri) = GenericHeader::splitHeaderLine($headerLine);

        
// check to ensure proper header type for this factory
        
if (strtolower($name) !== strtolower($locationHeader->getFieldName())) {
            throw new 
ExceptionInvalidArgumentException(
                
'Invalid header line for "' $locationHeader->getFieldName() . '" header string'
            
);
        }

        
$locationHeader->setUri(trim($uri));

        return 
$locationHeader;
    }

    
/**
     * Set the URI/URL for this header, this can be a string or an instance of ZendUriHttp
     *
     * @param string|UriInterface $uri
     * @return AbstractLocation
     * @throws ExceptionInvalidArgumentException
     */
    
public function setUri($uri)
    {
        if (
is_string($uri)) {
            try {
                
$uri UriFactory::factory($uri);
            } catch (
UriExceptionInvalidUriPartException $e) {
                throw new 
ExceptionInvalidArgumentException(
                        
sprintf('Invalid URI passed as string (%s)', (string) $uri),
                        
$e->getCode(),
                        
$e
                
);
            }
        } elseif (!(
$uri instanceof UriInterface)) {
            throw new 
ExceptionInvalidArgumentException('URI must be an instance of ZendUriHttp or a string');
        }
        
$this->uri $uri;

        return 
$this;
    }

    
/**
     * Return the URI for this header
     *
     * @return string
     */
    
public function getUri()
    {
        if (
$this->uri instanceof UriInterface) {
            return 
$this->uri->toString();
        }
        return 
$this->uri;
    }

    
/**
     * Return the URI for this header as an instance of ZendUriHttp
     *
     * @return UriInterface
     */
    
public function uri()
    {
        if (
$this->uri === null || is_string($this->uri)) {
            
$this->uri UriFactory::factory($this->uri);
        }
        return 
$this->uri;
    }

    
/**
     * Get header value as URI string
     *
     * @return string
     */
    
public function getFieldValue()
    {
        return 
$this->getUri();
    }

    
/**
     * Output header line
     *
     * @return string
     */
    
public function toString()
    {
        return 
$this->getFieldName() . ': ' $this->getUri();
    }

    
/**
     * Allow casting to string
     *
     * @return string
     */
    
public function __toString()
    {
        return 
$this->toString();
    }
}
Онлайн: 1
Реклама