Сегодня будем подробнее говорить о
фейкере от фзанинотто. Библиотека попалась, когда возникла задача формирования разнообразных тестовых данных - от фейковых пользователей до заполнения ИБ каталога. Фактически, это будет некий художественный перевод документации, ориентированный на русскоязычного пользователя.
Либа требует минимум PHP 5.3.3.
Стартуем
Скачиваем библиотеку. Собственно говоря, нам понадобится только папка src, можно в неё даже не заглядывать, для использования документации вполне хватит.
//инклюдим библиотеку
require_once 'src/autoload.php';
//создаём экземпляр класса
$faker = Faker\Factory::create();
Данные фейкер генерит по вызову определённых свойств с вполне говорящими именами. Каждый вызов одного и того же свойства даёт разные результаты. Хотя возможность выдачи одинаковых результатов имеется, об этом поговорим позже.
Каждое из свойств объекта является некоторым "форматтером". Для каждой локали есть некоторые различия в количестве и выводе форматтеров. Основываясь на здравом смысле, уделим наибольшее внимание функциям, нужным для русскоязычного использования, и русской локали.
Person
форматтер | описание | пример вывода |
name | полное имя, рандомный формат (из списка в классе). для английской локали возможно добавление префикса и суффикса. для русской локали есть вероятность вывода фамилии вместо отчества из-за ошибки в одном из встроенных форматов. | 'Алексей Евгеньевич Константинов', 'Mrs. Alysson Feil PhD', 'Ларионов Артём Симонов', 'Miss Justyn Nienow' |
firstName | просто имя в зависимости от локали | 'Витольд', 'Cathrine', 'Добрыня' |
middleName | отчество. только для русской локали. | 'Александрович', 'Алексеевич', 'Андреевич', 'Дмитриевич' |
lastName | фамилия | 'Егоров', 'Матвеев', 'Бобров', 'Maynard', 'Weber' |
Address
форматтер | описание | пример вывода |
cityPrefix | тип поселения | 'Ville', 'город' |
streetPrefix | тип улицы | 'пер.', 'ул.', 'пр.', 'шоссе', 'пл.', 'бульвар', 'въезд', 'спуск', 'проезд', 'наб.' |
region | область | Московская |
regionPrefix | тип региона. отсутствует в английской версии | область |
buildingNumber | номер дома, две цифры | 26 |
city | название поселения | 'Балашиха', 'Видное', 'Волоколамск','Щёлково', 'East Pearlinehaven', 'Port Danyka', 'Turcotteland' |
street | название улицы, только в русской локали | 'Ладыгина', 'Ленина', 'Ломоносова', |
postcode | 5 цифр (вообще-то в России 6 цифр =)) | 23545 |
address | полный адрес.форматы в локалях различаются | RU: postcode, region regionSuffix, cityPrefix city, streetPrefix street, buildingNumber
EN: streetAddress postcode city |
country | страна | 'Австралия', 'Австрия', 'Азербайджан','Afghanistan', 'Albania', 'Algeria', 'American Samoa', 'Andorra' |
latitude | широта | 77.147489 |
longitude | долгота | 86.211205 |
PhoneNumber
форматтер | описание | пример вывода |
номер телефона | в локалях различаются только форматы | '(812) ###-##-##', '(495) ###-####', '+7 (922) ###-####', '8-800-###-####' |
Company
на русском языке отсутствует, есть только англоязычный вывод
форматтер | описание | пример вывода |
catchPhrase | слоган компании | Monitored regional contingency |
bs | краткое описание компании | e-enable robust architectures |
company | название | Bogan-Treutel |
companySuffix | постфикс | and Sons |
Lorem
на русском языке отсутствует, есть только англоязычный вывод
форматтер | описание | пример вывода |
word | слово | |
words($nb=3) | массив слов (количество передаётся в аргумент) | |
sentence($nbWords = 6) | предложение (количество слов передаётся в аргумент) | |
sentences($nb=3) | | |
paragraph($nbSentences = 3) | текст (количество предложений передаётся в аргумент) | |
paragraphs ($nb=3) | массив параграфов (количество параграфов передаётся в аргумент) | |
text($maxNbChars = 200) | текст (в аргумент передаётся максимальное число символов) | |
Internet
на русском языке иногда бывают странные результаты. если хочется предсказуемых английских емейлов, то лучше пользоваться английской локалью. например, фейкер использует русскоязычные имена для генерации имени до знака @. короче, для этой части лучше использовать локаль по умолчанию, то есть английскую. в столбике примеров приведены результаты вывода русской локали.
форматтер | описание | пример вывода |
email | емейл | Андрей35@hotmail.com |
safeEmail | емейл с несуществующего домена | Артемий63@example.org |
freeEmail | емейл с бесплатного сервиса | mМорозов@gmail.com |
companyEmail | емейл компании | kВоронцов@Мамонтов-Петухов.org |
freeEmailDomain | домен бесплатного почтовика | gmail.com |
safeEmailDomain | домен несуществующего почтовика | example.net |
userName | имя юзверя до знака @ | Алексей.Гущин |
domainName | просто рандомный домен второго уровня | Комиссаров.com |
domainWord | типа тайтл домена | Коновалов-Колобов |
tld | домен первого уровня соответствующей локали | ru |
url | рандомный урл | http://Михайлов.com/ |
ipv4 | айпишник версии 4 | 241.81.91.197 |
ipv6 | айпишник версии 6 | ccb:365:621:9c7f:8cca:680d:1475:127d |
DateTime
этот раздел не имеет русскоязычной локали. возвращает англоязычные варианты.
форматтер | описание | пример вывода |
unixTime | время в юникс-формате(секунды) | 58781813 |
dateTime | дата современности. возвращает объект | свойства: date=>"1976-12-26 05:04:00"
timezone=>"+00:00" |
dateTimeAD | даты прошлых веков =) возвращает объект | свойства: date=>"1445-05-16 16:43:33"
timezone=>"+00:00" |
iso8601 | дата в формате исо8601 | 1979-02-01T06:29:19+0000 |
date($format = 'Y-m-d') | почти аналог пхп-шной функции, формат берём из пхп-шных доков | 1987-02-20 |
time($format = 'H:i:s') | почти аналог пхп-шной функции, формат берём из пхп-шных доков | 05:47:51 |
dateTimeBetween($startDate = '-30 years', $endDate = 'now') | для описания возможных значений аргументов смотрим например в strtotime. возвращает объект - время в указанном интервале. | свойства: date=>"2002-11-20 22:13:20"
timezone=>"+00:00" |
dateTimeThisCentury | частный случай dateTimeBetween. возвращает дату за последние сто лет. | |
dateTimeThisDecade | частный случай dateTimeBetween. возвращает дату за последние десять лет. | |
dateTimeThisYear | частный случай dateTimeBetween. возвращает дату за год. | |
dateTimeThisMonth | частный случай dateTimeBetween. возвращает дату за месяц. | |
amPm | до обеда или после | am |
dayOfMonth | день месяца. число. | 05 |
dayOfWeek | день недели. | Wednesday |
month | номер месяца | 07 |
monthName | имя месяца | October |
year | год | 2009 |
century | век | XIV |
timezone | временная зона | Pacific/Palau |
| | |
Miscellaneous
boolean($chanceOfGettingTrue = 50) | получает в качестве аргумента процент вероятности получения true, возвращает соответственное true или false | false |
md5 | хеш md5 | de99a620c50f2990e87144735cd357e7 |
sha1 | хеш sha1 | f08e7f04ca1a413807ebc47551a40a20a0b4de5c |
sha256 | хеш sha256 | 0061e4c60dac5c1d82db0135a42e00c89ae3a333e7c26485321f24348c7e98a5 |
locale | код локали | en_UK |
countryCode | код страны | RU |
languageCode | код языка | fr |
DateTime
этот раздел не имеет русскоязычной локали. возвращает англоязычные варианты.
форматтер | описание | пример вывода |
randomDigit | цифра между 0 и 9 | 1 |
randomDigitNotNull | цифра между 1 и 9 | 9 |
randomNumber($nbDigits = NULL) | от нуля до числа разрядностью nbDigits. аналог mt_rand(0, pow(10,$nbDigits)-1) | |
randomNumber($from, $to) | число от from до to | |
randomFloat($nbMaxDecimals = NULL, $min = 0, $max = NULL) | число с плавающей точкой от min до max c nbMaxDecimals цифрами после запятой. | |
randomLetter | рандомная буква латинского алфавита | d |
randomElement($array = array ('a','b','c')) | рандомный выбор из массива | b |
numerify($string = '###') | заменяет вхождение # на рандомную цифру | |
lexify($string = '????') | заменяет вхождение ? на рандомную букву | |
bothify($string = '## ??') | заменяется вхождение # на рандомную цифру, а вхождение ? на рандомную букву | |
UserAgent
форматтер | описание | пример вывода |
userAgent | юзер агент рандомного браузера | Mozilla/5.0 (Windows CE) AppleWebKit/5350 (KHTML, like Gecko) Chrome/13.0.888.0 Safari/5350 |
chrome | юзер агент хрома | Mozilla/5.0 (Macintosh; PPC Mac OS X 10_6_5) AppleWebKit/5312 (KHTML, like Gecko) Chrome/14.0.894.0 Safari/5312 |
firefox | юзер агент файрфокса | Mozilla/5.0 (X11; Linuxi686; rv:7.0) Gecko/20101231 Firefox/3.6 |
safari | юзер агент сафари | Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_7_1 rv:3.0; en-US) AppleWebKit/534.11.3 (KHTML, like Gecko) Version/4.0 Safari/534.11.3 |
opera | юзер агент оперы | Opera/8.25 (Windows NT 5.1; en-US) Presto/2.9.188 Version/10.00 |
internetExplorer | юзер агент ослика | Mozilla/5.0 (compatible; MSIE 7.0; Windows 98; Win 9x 4.90; Trident/3.0) |
UUID
форматтер | описание | пример вывода |
uuid | универсальный уникальный идентификатор | 7e57d004-2b97-0e7a-b45f-5387367791cd |
Получение одинаковых значений
Иногда может понадобиться получение одинаковых значений от скрипта при каждом запуске. Фейкер предлагает метод seed(), принимающий число.
$faker = Faker\Factory::create();
$faker->seed(1234);
echo $faker->name;
Сколько бы раз вы не вызывали этот скрипт он всегда будет возвращать одно и то же.
Напоследок добавлю, что Фзанинотто выпускает свой фейкер под лицензией MIT.
Комментариев нет:
Отправить комментарий