{"id":15791563,"url":"https://github.com/adrenalinkin/enum-mapper","last_synced_at":"2025-03-31T18:48:51.118Z","repository":{"id":56941105,"uuid":"121619316","full_name":"adrenalinkin/enum-mapper","owner":"adrenalinkin","description":"Component provides easy way to emulate ENUM behaviour on the PHP layer instead database and convert database value into human representation and vise versa","archived":false,"fork":false,"pushed_at":"2018-04-10T10:31:09.000Z","size":12,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-10-11T23:05:41.943Z","etag":null,"topics":["component","enum-mapper","human-readable","humanize","humanized-values"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/adrenalinkin.png","metadata":{"files":{"readme":"README.RU.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-02-15T10:59:44.000Z","updated_at":"2018-04-11T16:24:27.000Z","dependencies_parsed_at":"2022-08-21T07:20:34.370Z","dependency_job_id":null,"html_url":"https://github.com/adrenalinkin/enum-mapper","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adrenalinkin%2Fenum-mapper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adrenalinkin%2Fenum-mapper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adrenalinkin%2Fenum-mapper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adrenalinkin%2Fenum-mapper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/adrenalinkin","download_url":"https://codeload.github.com/adrenalinkin/enum-mapper/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246523890,"owners_count":20791443,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["component","enum-mapper","human-readable","humanize","humanized-values"],"created_at":"2024-10-04T23:01:13.987Z","updated_at":"2025-03-31T18:48:51.076Z","avatar_url":"https://github.com/adrenalinkin.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"Enum Mapper [![In English](https://img.shields.io/badge/Switch_To-English-green.svg?style=flat-square)](./README.md)\n===========\n\nВведение\n--------\n\nКомпонент обеспечивает эмуляцию поведения `ENUM` поля баз данных на уровне `PHP` посредством констант класса `PHP`.\n\nУстановка\n---------\n\nОткройте консоль и, перейдя в директорию проекта, выполните следующую команду для загрузки наиболее подходящей\nстабильной версии этого компонента:\n```bash\n    composer require adrenalinkin/enum-mapper\n```\n*Эта команда подразумевает что [Composer](https://getcomposer.org) установлен и доступен глобально.*\n\nПример использования\n--------------------\n\n### Создание маппера\n\nДля начала создаем класс-маппер и наследуем абстрактный класс [AbstractEnumMapper](./Mapper/AbstractEnumMapper.php).\nВторым и завершающим этапом является определение набора констант со специальными префиксами:\n * **DB_** - содержит значение из базы данных.\n * **HUMAN_** - содержит значение в человеко-понятной форме.\n\nДопустим у вас имеется необходимость хранить пол пользователей сайта. Тогда ваш класс будет иметь следующий вид:\n\n```php\n\u003c?php\n\nuse Linkin\\Component\\EnumMapper\\Mapper\\AbstractEnumMapper;\n\nclass GenderMapper extends AbstractEnumMapper\n{\n    const DB_UNDEFINED = 0;\n    const DB_MALE      = 10;\n    const DB_FEMALE    = 20;\n\n    const HUMAN_UNDEFINED = 'Undefined';\n    const HUMAN_MALE      = 'Male';\n    const HUMAN_FEMALE    = 'Female';\n}\n```\n\n### Применение\n\n#### fromDbToHuman\n\nПолучение человеко-понятного представление на основе данных из базы данных:\n\n```php\n\u003c?php\n\n    $mapper        = new GenderMapper();\n    $dbGenderValue = GenderMapper::DB_MALE; // 10\n    $humanValue    = $mapper-\u003efromDbToHuman($dbGenderValue);\n```\n\nПеременная `$humanValue` будет содержать значение `Male`.\n**Примечание**: При попытке получить представление для незарегистрированного значения будет брошено исключение\n`UndefinedMapValueException`.\n\n#### fromHumanToDb\n\nПолучение значения для хранения в базе данных на основе человеко-понятного представления:\n\n```php\n\u003c?php\n\n    $mapper           = new GenderMapper();\n    $humanGenderValue = GenderMapper::HUMAN_FEMALE; // Female\n    $dbValue          = $mapper-\u003efromHumanToDb($humanGenderValue);\n```\n\nПеременная `$dbValue` будет содержать значение `20`.\n**Примечание**: При попытке получить представление для незарегистрированного значения будет брошено исключение\n`UndefinedMapValueException`.\n\n#### getMap\n\nПолучение полного списка соответствий значений из базы данных и их человеко-понятных значений:\n\n```php\n\u003c?php\n\n    $mapper = new GenderMapper();\n    $map    = $mapper-\u003egetMap(); // [0 =\u003e 'Undefined', 10 =\u003e 'Male', 20 =\u003e 'Female']\n```\n\n### Использование констант\n\nВсегда доступен стандартный вызов констант:\n\n```php\n\u003c?php\n\n    if (GenderMapper::DB_UNDEFINED === $maleFromForm) {\n        throw new \\Exception('Поле \"Пол\" обязательно для заполнения в этой форме');\n    }\n```\n\n#### getAllowedDbValues и getAllowedHumanValues\n\nПолучение списка всех доступных значений для базы данных и аналогичный метод для получения доступных человеко-понятных\nзначений:\n\n```php\n\u003c?php\n\n    $mapper       = new GenderMapper();\n    $allowedDb    = $mapper-\u003egetAllowedDbValues();    // [0, 10, 20]\n    $allowedHuman = $mapper-\u003egetAllowedHumanValues(); // ['Undefined', 'Male', 'Female']\n\n    // Исключение значений из возвращаемого результата\n    $allowedDb    = $mapper-\u003egetAllowedDbValues([GenderMapper::DB_UNDEFINED]);       // [10, 20]\n    $allowedHuman = $mapper-\u003egetAllowedHumanValues([GenderMapper::HUMAN_UNDEFINED]); // ['Male', 'Female']\n```\n\n#### getRandomDbValue и getRandomHumanValue\n\nПолучение случайного значения одного из доступных значений базы данных или человеко-понятного представления:\n\n```php\n\u003c?php\n\n    $mapper      = new GenderMapper();\n    $randomDb    = $mapper-\u003egetRandomDbValue();    // 0 || 10 || 20\n    $randomHuman = $mapper-\u003egetRandomHumanValue(); // Undefined || Male || Female\n\n    // Исключение значений из возвращаемого результата\n    $randomDb    = $mapper-\u003egetRandomDbValue([GenderMapper::DB_UNDEFINED]);       // 10 || 20\n    $randomHuman = $mapper-\u003egetRandomHumanValue([GenderMapper::HUMAN_UNDEFINED]); // Male || Female\n```\n\nЛицензия\n--------\n\n[![license](https://img.shields.io/badge/License-MIT-green.svg?style=flat-square)](./LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadrenalinkin%2Fenum-mapper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fadrenalinkin%2Fenum-mapper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadrenalinkin%2Fenum-mapper/lists"}