phpsoftbox / inflector
Inflector (pluralize/singularize) for the PhpSoftBox framework
Installs: 3
Dependents: 1
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/phpsoftbox/inflector
Requires
- php: ^8.4
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.93
- phpsoftbox/cli-app: dev-master
- phpsoftbox/cs-fixer: ^1.0.1
- phpunit/phpunit: ^11.2
Suggests
- ext-iconv: Enables transliteration for urlize() via unaccent().
- ext-mbstring: Improves unicode lowercasing for tableize() and urlize().
This package is auto-updated.
Last update: 2026-02-06 10:48:59 UTC
README
phpsoftbox/inflector — компонент для преобразования слов между единственным и множественным числом.
Компонент вдохновлён Doctrine Inflector, но реализован в более лёгком и прагматичном виде, чтобы:
- не тянуть лишние зависимости,
- иметь предсказуемую архитектуру под мульти-языковые ruleset'ы,
- оставаться удобным для использования в ORM/DBAL.
Установка
composer require phpsoftbox/inflector
Быстрый старт
use PhpSoftBox\Inflector\InflectorFactory; use PhpSoftBox\Inflector\LanguageEnum; $inflector = InflectorFactory::create(LanguageEnum::EN); echo $inflector->pluralize('post'); // posts echo $inflector->singularize('posts'); // post
Дополнительные методы (конвенции/ORM)
Инфлектор также содержит небольшой набор утилит, часто полезных в ORM и соглашениях по именованию:
$inflector->tableize('BlogPost'); // blog_post $inflector->classify('blog_post'); // BlogPost $inflector->camelize('blog_post'); // blogPost $inflector->capitalize('top-o-the-morning to all_of_you!'); // Top-O-The-Morning To All_of_you! $inflector->urlize('My first blog post'); // my-first-blog-post
Поддержка языков
Язык выбирается через LanguageEnum.
Сейчас реализован только английский:
$inflector = InflectorFactory::create(LanguageEnum::EN);
В следующих релизах можно будет добавить русский язык, просто реализовав правила в src/Rules/Ru/... и добавив LanguageEnum::RU.
Как устроены правила (rules)
Структура rules-слоя похожа на Doctrine Inflector:
Pattern— паттерн (может быть регуляркой/.../или строкой/regex-фрагментом).Transformation— правило замены по совпадениюPattern.Substitution+Word— "неправильные" формы (irregular).Ruleset— объединяет:Transformations(regular)Patterns(uninflected)Substitutions(irregular)
Пример: английские правила располагаются в src/Rules/En:
Inflectable— склоняемые правила (plural/singular + irregular)Uninflected— слова/паттерны, которые не склоняютсяRules— сборка двух ruleset'ов (plural/singular)
Примеры
Irregular
$inflector = InflectorFactory::create(LanguageEnum::EN); echo $inflector->pluralize('person'); // people echo $inflector->singularize('people'); // person
Uninflected + regex
Uninflected можно задавать через паттерны, включая regex:
$inflector = InflectorFactory::create(LanguageEnum::EN); echo $inflector->pluralize('hardware'); // hardware echo $inflector->pluralize('metadata'); // metadata
Тесты
В репозитории PhpSoftBox тесты запускаются, как правило, через Makefile.
make select-inflector make php-test