URL 构建器

1.0.3 2024-03-20 07:27 UTC

This package is auto-updated.

Last update: 2024-09-20 09:11:25 UTC


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)。复制方法的名称以 withwithout 开头,不复制的方法以动词开头。

ArrayAccessIteratorAggregate 的实现按参数数组工作。迭代器的遍历顺序未定义。如果需要,可以按参数顺序遍历地址。