gstarczyk / uri
1.3.1
2019-07-15 12:09 UTC
Requires
- php: ^7.1
Requires (Dev)
- phpunit/phpunit: ^6.3
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