路径处理

2.1.1 2023-10-11 22:52 UTC

This package is auto-updated.

Last update: 2024-09-15 00:49:27 UTC


README

codecov

用于处理路径和URL的库。

重生的存储库 vinogradsoft/compass。此账户所有使用此库的项目都将更新以使用 vinogradsoft/compass

PHP >=8.0

安装

首选安装方式是通过 composer

运行以下命令

php composer require vinogradsoft/path "2.1.0"

或添加到 composer.json

"vinogradsoft/path": "^2.1.0"

Path

<?php

use Vinograd\Path\Path;

require_once dirname(__DIR__, 1) . '/vendor/autoload.php';

$path = new Path('/__NAME__/__NAME__Scanner/__NAME2__Driver');

$path->replaceAll([
    '__NAME__' => 'User',
    '__NAME2__' => 'Filesystem',
]);
$path->updateSource();
echo '<br>', $path;
$path->setAll(['path','to','file.txt']);

$path->updateSource();
echo '<br>', $path;

结果

/User/UserScanner/FilesystemDriver
path/to/file.txt

增加了对URL的支持。

支持在多种构建器中生成URL。方案显示了可以获取和修改的数据。

  |---------------------------------------absolute url---------------------------------|
  |                                                                                    |
  |-----------------base url----------------|------------------relative url------------|
  |                                         |                                          |
  |                    authority            |          path            query   fragment|
  |       /‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\|/‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾\ /‾‾‾‾‾‾‾‾\ /‾‾‾‾‾‾\|
  |http://grigor:password@vinograd.soft:8080/path/to/resource.json?query=value#fragment|
   \__/   \___/  \_____/  \___________/ \__/                  \___/
  scheme  user   password     host      port                  suffix
<?php
require_once dirname(__DIR__, 1) . '/vendor/autoload.php';

use \Vinograd\Path\Url;

$url = Url::createBlank();

$url->setScheme('https')
    ->setUser('grigor')
    ->setPassword('pass@word')
    ->setHost('host.ru')
    ->setPort('8088')
    ->setPath('/user/index')
    ->setSuffix('.php')
    ->setArrayQuery([
        'key1' => 'value1',
        'key2' => 'value2'
    ])->setFragment('fragment');

$url->updateSource();

printUrl($url);
echo '<br><br>####################################';

$url = new Url('https://grigor:pass%40word@host.ru:8088/user/index?key1=value1&key2=value2#fragment');
$url->setSuffix('.php');
$url->updateSource();

printUrl($url);

function printUrl($url)
{
    echo '<br><b>Authority:</b> ', $url->getAuthority();
    echo '<br><b>BaseUrl:</b> ', $url->getBaseUrl();
    echo '<br><b>RelativeUrl:</b> ', $url->getRelativeUrl();
    echo '<br><b>AbsoluteUrl:</b> ', $url; //$url->getSource();
    echo '<br>';

    echo '<br><b>getScheme:</b> ', $url->getScheme();
    echo '<br><b>getUser:</b> ', $url->getUser();
    echo '<br><b>getPassword:</b> ', $url->getPassword();
    echo '<br><b>getHost:</b> ', $url->getHost();
    echo '<br><b>getPort:</b> ', $url->getPort();
    echo '<br><b>getPath:</b> ', $url->getPath();
    echo '<br><b>getSuffix:</b> ', $url->getSuffix();
    echo '<br><b>getQuery:</b> ', $url->getQuery();
    echo '<br><b>getFragment:</b> ', $url->getFragment();
}

结果

Authority: grigor:pass%40word@host.ru:8088
BaseUrl: https://grigor:pass%40word@host.ru:8088
RelativeUrl: /user/index.php?key1=value1&key2=value2#fragment
AbsoluteUrl: https://grigor:pass%40word@host.ru:8088/user/index.php?key1=value1&key2=value2#fragment

getScheme: https
getUser: grigor
getPassword: pass@word
getHost: host.ru
getPort: 8088
getPath: /user/index.php
getSuffix: .php
getQuery: key1=value1&key2=value2
getFragment: fragment

####################################
Authority: grigor:pass%40word@host.ru:8088
BaseUrl: https://grigor:pass%40word@host.ru:8088
RelativeUrl: /user/index.php?key1=value1&key2=value2#fragment
AbsoluteUrl: https://grigor:pass%40word@host.ru:8088/user/index.php?key1=value1&key2=value2#fragment

getScheme: https
getUser: grigor
getPassword: pass@word
getHost: host.ru
getPort: 8088
getPath: /user/index.php
getSuffix: .php
getQuery: key1=value1&key2=value2
getFragment: fragment

默认情况下创建的URL不进行编码。可以通过实现接口 \Vinograd\Path\UrlStrategy 来编写自己的URL创建策略。默认使用 \Vinograd\Path\DefaultUrlStrategy,以便将创建的URL传递给外部系统(如模板引擎)进行编码处理或其他处理。