不可变URI构建和创建的库。

1.3.1 2019-07-15 12:09 UTC

This package is auto-updated.

Last update: 2024-09-16 00:46:21 UTC


README

允许轻松构建和创建不可变Uri的库。

构建

为了使创建过程尽可能方便,该库提供了简单的Uri构建器。

从部分构建URI

使用构建器,您可以轻松构建Uri,分别定义Uri的每个部分。

$uri = UriBuilder::buildUri()
    ->withScheme('http')
    ->withUserInfo('user', 'pass')
    ->withHost('example.org')
    ->withPort(8080)
    ->withPath('/path/to/file.png')
    ->withQuery(['key' => 'value'])
    ->withFragment('top')
    ->getUri();

从字符串构建URI

当然,您可以使用构建器从字符串创建Uri。

$stringUri = 'https://example.org/my/page?sidebar=left@section1';

$uri = UriBuilder::buildUri()
    ->withPartsFromStringUri($stringUri)
    ->getUri();

如果您需要修改现有的Uri,您必须创建一个新的Uri来进行修改。

$stringUri = 'https://example.org/my/page?sidebar=left@section1';

$uri = UriBuilder::buildUri()
    ->withPartsFromStringUri($stringUri)
    ->withoutQuery()
    ->withoutFragment()
    ->withUserInfo('someuser')
    ->getUri();

从现有URI构建URI

您可以从另一个现有的URI构建Uri。

$uri = UriBuilder::buildUri()
    ->withPartsFromUriObject($exitingUri)
    ->withoutQuery()
    ->getUri();

定义slug

有时您只想更改路径的一部分。为了帮助这种情况,UriBuilder支持slug操作。

$stringUri = 'https://example.org/my/cover.png';

$uri = UriBuilder::buildUri()
    ->withPartsFromStringUri($stringUri)
    ->withSlug('poster.jpg')
    ->getUri();
 
 // $uri => https://example.org/my/poster.jpg

或者如果您只想从路径中删除slug

$stringUri = 'https://example.org/my/cover.png';

$uri = UriBuilder::buildUri()
    ->withPartsFromStringUri($stringUri)
    ->withoutSlug()
    ->getUri();
 
 // $uri => https://example.org/my/
 

请记住,slug是路径的最后一段

$stringUri = 'https://example.org/my/images';
// "images" from path will be treated as slug 

$uri = UriBuilder::buildUri()
    ->withPartsFromStringUri($stringUri)
    ->withoutSlug()
    ->getUri();
 
 // $uri => https://example.org/my/

解析路径

您可以使用相对路径段构建您的"路径"。

$uri = UriBuilder::buildUri()
    ->withResolvedPath('/home/user1/documents/../downloads/./file1')
    ->getUri();
 
 // $uri->getPath => /home/user1/downloads/file1

或者您可以通过结合绝对基本路径和许多相对路径来构建路径

$uri = UriBuilder::buildUri()
    ->withPath('/home/user1/')
    ->withExistingPathResolvedWith('../user2/documents')
    ->withExistingPathResolvedWith('../downloads/file1.ext')
    ->getUri();
 
 // $uri->getPath => /home/user2/downloads/file1.ext

请记住,您构建的路径必须是可解析的。例如,不能以"../"开头或

//invalid base path
$uri = UriBuilder::buildUri()
    ->withResolvedPath('../home/user1/documents/file1')
    ->getUri();
    
//invalid base path
$uri = UriBuilder::buildUri()
    ->withPath('../home/user1/')
    ->withExistingPathResolvedWith('./documents')
    ->getUri();

//invalid path to resolve with
$uri = UriBuilder::buildUri()
    ->withPath('/home/user1/')
    ->withExistingPathResolvedWith('../../../../user2/documents')
    ->getUri();

// each above builders throw exception