artklen / ub
1.0.3
2024-03-20 07:27 UTC
Requires
- php: >=8.0
README
该包包含一个类。解决的问题是:以始终相同的参数顺序收集 URL,格式与表单发送的结果相同。
URL 的收集发生在对象转换为字符串的瞬间。收集后,可以重复使用对象,其状态不会损坏。
该类已为继承准备。通过重定义多个方法,可以为项目的其余部分透明地生成 SEO 友好的 URL。 SEO 友好 URL 示例。
创建
$ub = new UB($path, $fields, $values);
$path
— 对于相对地址,这是路径;对于绝对地址,这是直到?
符号的部分字符串。$fields
— 生成 URL 时参数的顺序。不在列表中的参数将添加到字符串末尾。$values
— 所有 URL 参数,格式为 [键 => 值]。
所有数据均可通过设置器进行重写。
示例:从参数构建 URL。
print new UB( path: '/catalog/', fields: ['price', 'producer_id'], values: [ 'producer_id' => [1, 2], 'sort' => 'popularity', 'price' => [ 'max' => 20000, ], ], );
执行结果
/catalog/?price%5Bmax%5D=20000&producer_id%5B%5D=1&producer_id%5B%5D=2&sort=popularity
示例:创建当前请求的对象。
new UB( path: strtok($_SERVER['REQUEST_URI'], '?'), values: $_GET, )
示例:从任意 URL 创建对象。
function ub_from_url(string $url): UB { parse_str(parse_url($url, PHP_URL_QUERY), $values); return new UB( path: parse_url($url, PHP_URL_PATH), values: $values, ); } $ub = ub_from_url('/catalog/?price%5Bmax%5D=20000&producer_id%5B%5D=1&producer_id%5B%5D=2&sort=popularity'); print $ub->getPath() . "\n"; print json_encode($ub->getAllValues()) . "\n";
执行结果
/catalog/
{"price":{"max":"20000"},"producer_id":["1","2"],"sort":"popularity"}
如果有需要,可以添加到类的静态方法中。
数据处理
对象的所有数据均可通过方法进行读取和写入。
可以更改对象本身或创建更改后的副本。对应每种方式的 方法具有不同的名称和签名。复制方法返回副本(static
),不复制的方法不返回任何内容(void
)。复制方法的名称以 with
和 without
开头,不复制的方法以动词开头。
ArrayAccess
和 IteratorAggregate
的实现按参数数组工作。迭代器的遍历顺序未定义。如果需要,可以按参数顺序遍历地址。