От автора: на ранних этапах создания приложения, всегда возникает острая необходимость в тестовых данных, то есть в данных, которые будут отображаться на экран при проверке работоспособности отдельных участков кода. Также при работе с базой данных и формированию SQL запросов, таблицы желательно наполнить контентом, ведь в противном случае просто невозможно оптимизировать и проверить правильность работы последних. При этом ручное создание тестовых данных порой очень время затратное и это время бывает соизмеримо со временем, требуемым на написание функционала.
В данном уроке я хотел бы представить Вашему вниманию, замечательную библиотеку Faker, написанную на языке PHP, которая представляет собой генератор случайных данных, причем сгенерировать можно данные практически любого формата.
Официальную страничку библиотеки, вместе с краткой, но довольно информативной документацией, можно найти на сервисе GitHub по ссылке. Для установки библиотеки на Ваш проект, достаточно выполнить одну простую команду в консоли, используя инструмент Composer:
composer require fzaninotto/faker
При этом в директории проекта, будет создан каталог vendor, внутри которого Вы найдете рассматриваемую нами библиотеку. При этом хотел бы отметить, что по адресу vendor\fzaninotto\faker\src\Faker Вы найдете файл Generator.php, в котором определен одноименный класс Generator, свойства которого как раз предоставляют доступ к сгенерированным данным. Собственно в комментариях перед определением класса – приведен краткий справочник по хранимым данным в каждом свойстве (это на тот случай, если у Вас не будет доступа к страничке библиотеки на сервисе GitHub).
Теперь приступаем к работе с самой библиотекой. Собственно первым делом подключаем файл autoload.php, который был сгенерирован инструментом composer:
<?php require "vendor/autoload.php";
Далее создаем объект класса Faker, используя метод create(). При этом в качестве первого аргумента можно передать код, интересующей Вас локализации (в комплекте библиотеки, поставляется множество различных локализаций).
$faker = Faker\Factory::create();
Собственно все приготовления завершены, и можно приступать к генерации данных. При этом для создания тестовой информации, достаточно обратиться к соответствующему свойству или методу объекта $faker, в зависимости от того, какие данные Вас интересуют.
Для начала, предположим, что Вам нужно сформировать имя пользователя и его адрес. Для этого достаточно вывести на экран значения двух свойств:
echo $faker->name.'<br>'; echo $faker->address.'<br>';
Соответственно результат будет следующим:
К свойствам можно обращаться многократно, к примеру, в цикле, что приведет к созданию множества тестовых данных. К примеру, давайте сгенерируем случайные числа:
for($i = 0; $i < 10; ++$i) { echo $faker->randomNumber.'<br>'; }
При этом на экране мы увидим следующее:
При добавлении модификатора unique(), Вы сможете создать уникальные не повторяющиеся данные.
for($i = 0; $i < 10; ++$i) { echo $faker->unique()->randomNumber.'<br>'; }
Есть также модификатор позволяющий, разрешить пропуск генерации данных, его имя optional():
for($i = 0; $i < 10; ++$i) { echo $faker-> optional()->randomNumber.'<br>'; }
Помимо этого создаваемые данные можно провалидировать, в соответствии с логикой, описанной в пользовательской функции. К примеру сгенерируем числа, которые больше 5:
$func = function($digit) { return $digit > 5; }; for($i = 0; $i < 10; ++$i) { echo $faker->valid($func)->randomDigit.'<br>'; }
На экране мы увидим следующее:
Помимо простых значений, можно генерировать более сложные, которые будут возвращаться в виде массива. К примеру, давайте сгенерируем информацию о кредитных картах, для платежных систем.
for ($i=0;$i<10;$i++) { $cc[$i] = $faker->creditCardDetails; $cc[$i]['security']=$faker->numberBetween(199,499); } echo "<pre>"; print_r ($cc); echo "</pre>";
На экране мы при этом увидим следующий результат:
Также можно создать информацию для формирования данных о пользователе:
echo $faker->name.'<br>'; echo $faker->firstNameMale.'<br>'; echo $faker->address.'<br>'; echo $faker->city.'<br>'; echo $faker->country.'<br>'; echo $faker->email.'<br>'; echo $faker->password.'<br>';
Ну и то же самое для русской локализации:
$faker = Faker\Factory::create(ru_RU); echo $faker->name.'<br>'; echo $faker->firstNameMale.'<br>'; echo $faker->address.'<br>'; echo $faker->city.'<br>'; echo $faker->country.'<br>'; echo $faker->email.'<br>'; echo $faker->password.'<br>';
Собственно здесь я привел только малую часть доступных свойств и методов, более подробно библиотека рассмотрена в видео версии урока.
Как Вы видите инструмент достаточно полезный и буквально за несколько минут можно получить любой набор тестовых данных и передать их либо на отображение в браузер, либо на сохранение в базу данных, файл или же необходимый документ.
На этом статья завершена. Всего Вам доброго и удачного кодирования!