Str
Moony\bootstrap\core\helpers\Str — statická třída pro práci s řetězci. Dostupná i v Twig šablonách přes {{ app.str.metoda() }}.
| Str::isJson(string $value) | Vrátí true pokud je string validní JSON |
| Str::limit(string $value, int $limit = 100, string $end = '...') | Ořízne string na zadanou délku, přidá koncovku |
| Str::random(int $length = 16) | Vygeneruje náhodný alfanumerický řetězec |
| Str::replaceFirst(string $search, string $replace, string $subject) | Nahradí první výskyt |
| Str::replaceLast(string $search, string $replace, string $subject) | Nahradí poslední výskyt |
| Str::replaceAll(string|array $search, string|array $replace, string $subject) | Nahradí všechny výskyty (wrapper nad str_replace) |
| Str::startsWith(string $haystack, string $needle) | Začíná řetězec daným prefixem |
| Str::endsWith(string $haystack, string $needle) | Končí řetězec daným suffixem |
| Str::contains(string $haystack, string $needle) | Obsahuje řetězec podřetězec |
| Str::empty(?string $var) | Skutečná kontrola prázdného stringu (null nebo ''). Bezpečnější než nativní empty(). |
| Str::slug(string $title, string $separator = '-') | URL-friendly slug — odstraní diakritiku, speciální znaky, lowercase |
| Str::camel(string $value) | Převede na camelCase: 'user-name' → 'userName' |
| Str::snake(string $value, string $delimiter = '_') | Převede na snake_case: 'userName' → 'user_name' |
| Str::kebab(string $value) | Převede na kebab-case: 'userName' → 'user-name' |
| Str::mask(string $value, string $char = '*', int $visibleStart = 2, int $visibleEnd = 2) | Zamaskuje část stringu: 'denis@email.com' → 'de***********om' |
Str::slug('Článek o PHP frameworku'); // "clanek-o-php-frameworku"
Str::limit('Dlouhý text...', 10); // "Dlouhý te..."
Str::random(32); // "a1b2c3d4e5f6..."
Str::mask('denis@email.com'); // "de***********om"
Str::camel('created_at'); // "createdAt"
Str::snake('createdAt'); // "created_at"
Str::empty(''); // true
Str::empty(null); // true
Str::empty('0'); // false (rozdíl od native empty())
Arr
Moony\bootstrap\core\helpers\Arr — statická třída pro práci s poli. Podporuje tečkovou notaci pro přístup k vnořeným hodnotám. Dostupná v Twig přes {{ app.arr.metoda() }}.
| Arr::get(array $array, string|int|null $key, mixed $default = null) | Vrátí hodnotu z pole, podporuje tečkovou notaci: 'user.address.city' |
| Arr::exists(array $array, string|int|float $key) | Existuje klíč v poli |
| Arr::accessible(mixed $value) | Je hodnota pole |
| Arr::sum(array $array, string|int|null $key) | Součet hodnot v multidimenzionálním poli dle klíče (tečková notace) |
| Arr::groupBy(array $array, string $key) | Seskupí prvky pole podle hodnoty klíče |
| Arr::depth(array $array) | Vrátí hloubku (počet dimenzí) pole |
| Arr::only(array $array, array $keys) | Vrátí jen zadané klíče z pole |
| Arr::except(array $array, array $keys) | Vrátí pole bez zadaných klíčů |
| Arr::flatten(array $array, int $depth = INF) | Zploští vícerozměrné pole do jednorozměrného |
| Arr::generateCombinations(array $array) | Vygeneruje všechny kombinace hodnot z více polí |
| Arr::mergeByDataRichness(array ...$arrays) | Sloučí pole — vybere hodnotu s nejvíce daty (nejdelší string, největší pole) |
| Arr::mergeRecursiveOverride(array $base, array $override) | Rekurzivní merge — override přepíše base (používá se pro config) |
$user = ['name' => 'Denis', 'address' => ['city' => 'Praha']];
Arr::get($user, 'address.city'); // "Praha"
Arr::get($user, 'phone', 'N/A'); // "N/A"
$items = [
['name' => 'A', 'price' => 100, 'category' => 'food'],
['name' => 'B', 'price' => 200, 'category' => 'food'],
['name' => 'C', 'price' => 50, 'category' => 'drink'],
];
Arr::sum($items, 'price'); // 350
Arr::groupBy($items, 'category'); // ['food' => [...], 'drink' => [...]]
Arr::only(['a' => 1, 'b' => 2, 'c' => 3], ['a', 'c']); // ['a' => 1, 'c' => 3]
Arr::except(['a' => 1, 'b' => 2, 'c' => 3], ['b']); // ['a' => 1, 'c' => 3]
Arr::flatten([[1, 2], [3, [4, 5]]]); // [1, 2, 3, 4, 5]
Filesystem
Moony\bootstrap\core\helpers\Filesystem — práce se soubory a složkami.
| Filesystem::copyDirectory(string $source, string $target) | Rekurzivně zkopíruje složku včetně obsahu |
| Filesystem::deleteDirectory(string $dir) | Rekurzivně smaže složku a celý její obsah |
| Filesystem::emptyDirectory(string $dir) | Smaže obsah složky, ale ponechá samotnou složku |
| Filesystem::getFileExtension(string $fileName) | Vrátí příponu souboru (lowercase) |
| Filesystem::humanizeFileSize(int $sizeInBytes, int $decimals = 1) | Převede bajty na čitelný formát: 1048576 → '1.0 MB' |
| Filesystem::getLastLineOfFile(string $path, bool $excludeEmpty = false) | Vrátí poslední řádek souboru (efektivně, bez čtení celého souboru) |
| Filesystem::getFileLines(string $file) | Generator — čte soubor řádek po řádku (paměťově efektivní pro velké soubory) |
Filesystem::humanizeFileSize(5 * MB); // "5.0 MB"
Filesystem::getFileExtension('foto.JPG'); // "jpg"
// Čtení velkého souboru po řádcích
foreach(Filesystem::getFileLines('/storage/log/app.log') as $line) {
// zpracování řádku bez načtení celého souboru do RAM
}
UTC
Moony\bootstrap\core\helpers\UTC — práce s UTC časem. Veškerá data v databázi by měla být v UTC.
| UTC::get(?string $format = null) | Vrátí aktuální UTC čas. Bez parametru vrátí formát pro DB: 2026-04-07 14:30:22.15 |
| UTC::getTimestamp() | Vrátí Unix timestamp v UTC |
| UTC::getFromDibi(\Dibi\DateTime $dateTime) | Převede Dibi DateTime na PHP DateTime v UTC zóně |
| UTC::getListOfTimezones() | Vrátí formátovaný seznam časových zón: '(UTC +01:00) - Europe/Prague' |
// Uložení do DB
$data['created_at'] = UTC::get(); // "2026-04-07 14:30:22.15"
// Vlastní formát
UTC::get('Y-m-d'); // "2026-04-07"
// Timestamp
UTC::getTimestamp(); // 1775657422
// Seznam zón pro select
$timezones = UTC::getListOfTimezones();
// ['Europe/Prague' => '(UTC +01:00) - Europe/Prague', ...]
V databázi vždy ukládejte čas v UTC. Převod na uživatelovu časovou zónu se provádí až při zobrazení pomocí getTimezone().
