Вход Регистрация
Файл: concrete5.7.5.6/concrete/vendor/league/url/src/Components/Path.php
Строк: 94
<?php
/**
* This file is part of the League.url library
*
* @license http://opensource.org/licenses/MIT
* @link https://github.com/thephpleague/url/
* @version 3.3.5
* @package League.url
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace LeagueUrlComponents;

/**
 *  A class to manipulate URL Path component
 *
 *  @package League.url
 *  @since  1.0.0
 */
class Path extends AbstractSegment implements PathInterface
{
    
/**
     * {@inheritdoc}
     */
    
protected $delimiter '/';

    
/**
     * {@inheritdoc}
     */
    
public function get()
    {
        
$res = array();
        foreach (
array_values($this->data) as $value) {
            
$res[] = rawurlencode($value);
        }
        if (! 
$res) {
            return 
null;
        }

        return 
implode($this->delimiter$res);
    }

    
/**
     * {@inheritdoc}
     */
    
public function getUriComponent()
    {
        return 
'/'.$this->__toString();
    }

    
/**
     * {@inheritdoc}
     */
    
public function getRelativePath(PathInterface $reference)
    {
        if (
$this->sameValueAs($reference)) {
            return 
'';
        }

        
$ref_path array_values($reference->toArray());
        
$this_path array_values($this->data);
        
$filename array_pop($this_path);

        
//retrieve the final consecutive identical segment in the current path
        
$index 0;
        foreach (
$ref_path as $offset => $value) {
            if (! isset(
$this_path[$offset]) || $value != $this_path[$offset]) {
                break;
            }
            
$index++;
        }
        
//deduce the number of similar segment according to the reference path
        
$nb_common_segment count($ref_path) - $index;
        
$nb_segments = array();
        if (
$nb_common_segment) {
            
$nb_segments array_fill(0$nb_common_segment'..');
        }

        
//let's output the relative path using a new Path object
        
$res = new Path(array_merge(
            
$nb_segments,
            
array_slice($this_path$index),
            array(
$filename)
        ));

        return 
$res->__toString();
    }

    
/**
     * {@inheritdoc}
     */
    
protected function validate($data)
    {
        
$data $this->sanitizeValue($this->validateSegment($data));

        return 
array_map('urldecode'$data);
    }

    
/**
     * {@inheritdoc}
     */
    
protected function formatRemoveSegment($data)
    {
        return 
array_map('urldecode'parent::formatRemoveSegment($data));
    }
}
Онлайн: 0
Реклама