PHPackages                             artklen/ub - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. artklen/ub

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

artklen/ub
==========

URL builder

1.0.3(2y ago)024MITPHPPHP &gt;=8.0

Since Nov 22Pushed 2y ago1 watchersCompare

[ Source](https://github.com/artklen/ub)[ Packagist](https://packagist.org/packages/artklen/ub)[ RSS](/packages/artklen-ub/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependenciesVersions (5)Used By (0)

UB — URL Builder
----------------

[](#ub--url-builder)

Пакет содержит один класс. Решаемая задача: собирать url со всегда одинаковым порядком параметров, в формате, идентичном результату отправки формы.

Сборка url происходит в момент приведения объекта к строке. После сборки объект можно переиспользовать, его состояние не ломается.

Класс подготовлен для наследования. Переопределение нескольких методов позволит генерировать ЧПУ прозрачно для остальной части проекта. [Пример ЧПУ.](examples/custom-url.md)

### Создание

[](#создание)

```
$ub = new UB($path, $fields, $values);
```

- `$path` — для относительного адреса это путь, для абсолютного — часть строки до знака `?`.
- `$fields` — порядок параметров при генерации URL. Параметры, которых нет в списке, попадают в конец строки.
- `$values` — все параметры URL в формате \[ключ =&gt; значение\].

Все данные доступны для перезаписи через сеттеры.

---

Пример: сборка 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`, у не копирующих — начинаются с глагола.

МетодДействиеСигнатура◀️`getPath`Получить путь`getPath(): string``getFields`Получить список полей`getFields(): array``hasValue`Проверить, определено ли значение параметра`hasValue(string $name): bool``getValue`Получить значение параметра`getValue(string $name): mixed``getFieldsValues`Получить значения полей`getFieldsValues(): array``getAllValues`Получить значения всех параметров`getAllValues(): array`▶️`setPath`Изменить путь`setPath(string $path): void``setValue`Установить значение параметра`setValue(string $name, $value): void``unsetValue`Удалить значение параметра`unsetValue(string $name): void``appendValue`Добавить элемент к массиву значений параметра (аналог операции `[]=`)`appendValue(string $name, $value): void`↩️`withPath`Изменить путь`withPath(string $path): static``withFields`Изменить список полей`withFields(array $fields): static``with`Установить значение параметра`with(string $name, $value): static``without`Удалить значение параметра`without(string $name): static``withValues`Установить значения всех параметров` withValues(array $values): static``withoutValues`Удалить значения заданного списка параметров`withoutValues(array $values): static``withoutAllValues`Удалить значения всех параметров`withoutAllValues(): static `Имплементация `ArrayAccess` и `IteratorAggregate` работает по массиву параметров. Порядок обхода итератора не определён. Если будет потребность, можно сделать обход по порядку параметров в адресе.

###  Health Score

23

—

LowBetter than 27% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity8

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity50

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~39 days

Total

4

Last Release

789d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/7564ff5afe435d88add248974fb13eae4e455c46edcc26f940ddb594669b93d0?d=identicon)[artklen](/maintainers/artklen)

---

Top Contributors

[![artklen](https://avatars.githubusercontent.com/u/67576046?v=4)](https://github.com/artklen "artklen (4 commits)")

### Embed Badge

![Health badge](/badges/artklen-ub/health.svg)

```
[![Health](https://phpackages.com/badges/artklen-ub/health.svg)](https://phpackages.com/packages/artklen-ub)
```

###  Alternatives

[libern/qr-code-reader

Simple PHP QR Code Reader / Decoder

99231.8k3](/packages/libern-qr-code-reader)[jakezatecky/array_group_by

A function that groups/splits an array by the values of a given key or keys.

100188.7k2](/packages/jakezatecky-array-group-by)[foxxmd/laravel-elasticbeanstalk-cron

Ensure only one Laravel instance is running CRON jobs in an EB environment

62299.6k](/packages/foxxmd-laravel-elasticbeanstalk-cron)[scriptfusion/byte-formatter

Formats byte values as human-readable strings.

46308.0k6](/packages/scriptfusion-byte-formatter)[emcconville/polyline-encoder

PHP Traits algorithms for Encoded Polyline &amp; Bing Point Compression

30260.2k1](/packages/emcconville-polyline-encoder)[mcred/detect-credit-card-type

Utility to determine credit card type by PAN

16672.4k1](/packages/mcred-detect-credit-card-type)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
