Рубрики
Uncategorized

Фальшивое заполнение виртуальных данных и анализ источников

Автор оригинала: David Wong.

Faker-это виртуальный генератор данных, который можно использовать для заполнения базы данных для стресс-тестирования или для создания элегантных XML-документов.

устанавливать

Если проект поддерживает composer, установите его, используя следующие команды. Репозиторий Github Faker не поддерживается для загрузки исходного кода и размещения его в папке пакета расширений проекта.

composer require fzaninotto/faker

Чтобы продемонстрировать функциональность, я создал новый проект, используя следующие команды:

// Create a new project folder
mkdir data-seeder

cd data-seeder
// Install faker extensions
composer require fzaninotto/faker

Основной способ использования

Создайте тестовые файлы в корневом каталоге test. php Введите следующий код:

name, "\n";
echo $faker->address, "\n";
echo $faker->text;

Запустите сценарий в режиме командной строки. php test.php Просмотр выходных данных. Результаты faker генерируются случайным образом:

Prof. Kailyn Barton
9230 Herzog Groves Suite 005
Gusikowskihaven, CO 60533-4716
Nesciunt voluptas debitis iusto consectetur possimus mollitia in quam. Vel non rem temporibus illo numquam est. Sit fugit sed fugit id eligendi eaque sunt possimus.

Имя собственное фальшивки

Факер определяет некоторые имена собственные, чтобы помочь нам понять его дизайнерские идеи. Понимание этих концепций очень полезно для понимания его исходного кода.

Форматтеры

В дополнение к вышеперечисленным трем атрибутам, faker также предоставляет большое количество данных моделирования на выбор. Каждое свойство генератора (например, используемое выше) имя , адрес и лорем ) Все они называются Форматер (форматеры).

Поставщики

Существует много видов данных, которые нам необходимо заполнить, таких как

  • Основные случайные данные: целые числа, числа с плавающей запятой, буквы
  • Случайная Личная информация: Имя, Фамилия, Отчество и т.д.
  • Случайное число: номер мобильного телефона, номер телефона

Фейкер определяет каждую категорию как поставщика. сеялка данных/поставщик/fzaninotto/подделка/src/Подделка/Поставщик Вы можете просмотреть файлы классов различных поставщиков, а также файлы пакетов подъязыка.

Анализ исходного кода

Хотя пакет расширения faker невелик по размеру, он имеет все виды внутренних органов и представляет большую ценность для обучения.

Генерация объектов-подделок

Просмотр заводского метода генератора факера:

const DEFAULT_LOCALE = 'en_US';

protected static $defaultProviders = array('Address', 'Barcode', 'Biased', 'Color', 'Company', 'DateTime', 'File', 'HtmlLorem', 'Image', 'Internet', 'Lorem', 'Miscellaneous', 'Payment', 'Person', 'PhoneNumber', 'Text', 'UserAgent', 'Uuid');

public static function create($locale = self::DEFAULT_LOCALE)
{
    $generator = new Generator();
    foreach (static::$defaultProviders as $provider) {
        $providerClassName = self::getProviderClassname($provider, $locale);
        $generator->addProvider(new $providerClassName($generator));
    }

    return $generator;
}

параметр языковой стандарт Языковой пакет, по умолчанию en_US Американский английский. оставайтесь сеялка данных/поставщик/fzaninotto/подделка/src/Подделка/Поставщик Все поддерживаемые языковые пакеты можно просмотреть в каталоге.

Поставщики по умолчанию (уже упомянутые выше) можно найти один за другим в указанном выше каталоге поставщиков. Массив циклов, добавьте соответствующего поставщика в генератор $генератор

getProviderClassname

protected static function getProviderClassname($provider, $locale = '')
{
    if ($providerClass = self::findProviderClassname($provider, $locale)) {
        return $providerClass;
    }
    // fallback to default locale
    if ($providerClass = self::findProviderClassname($provider, static::DEFAULT_LOCALE)) {
        return $providerClass;
    }
    // fallback to no locale
    if ($providerClass = self::findProviderClassname($provider)) {
        return $providerClass;
    }
    throw new \InvalidArgumentException(sprintf('Unable to find provider "%s" with locale "%s"', $provider, $locale));
}

Имя класса getproviderclass будет искать класс поставщика в соответствии со следующей логикой. Если он не существует в текущем файле, он перейдет к файлу следующего уровня, чтобы найти его. Если он не существует, у него закончится исключение.

User-passed Language Pack Folder - > Default en_US Language Pack Folder - > Provider Root Directory

addProvider

public function addProvider($provider)
{
    array_unshift($this->providers, $provider);
}

AddiProvider очень прост, просто добавьте найденного поставщика в заголовок массива, который хранится в возвращаемом массиве. $генератор В свойствах объекта.

Вызов объекта-подделки

При использовании объекта, возвращаемого факером, существует два способа: вызов атрибутов и вызов методов. Эти вызовы запускают магические методы:

public function format($formatter, $arguments = array())
{
    return call_user_func_array($this->getFormatter($formatter), $arguments);
}

public function __get($attribute)
{
    return $this->format($attribute);
}

public function __call($method, $attributes)
{
    return $this->format($method, $attributes);
}

Логика этих двух вещей схожа. Вот относительно неприятный вопрос. _ _ |/__вызов Магического метода, который передает имя и параметры вызываемого метода формат Метода.

getFormatter

public function getFormatter($formatter)
{
    if (isset($this->formatters[$formatter])) {
        return $this->formatters[$formatter];
    }
    foreach ($this->providers as $provider) {
        if (method_exists($provider, $formatter)) {
            $this->formatters[$formatter] = array($provider, $formatter);

            return $this->formatters[$formatter];
        }
    }
    throw new \InvalidArgumentException(sprintf('Unknown formatter "%s"', $formatter));
}

$это->форматеры В нем хранится информация, связанная с форматированием, упомянутая в существительном собственного имени faker. Для удобства понимания эта статья иллюстрирует эти абстрактные концепции, взяв в качестве примера случайный элемент в массиве.

$faker->randomElement(['a', 'b', 'c']);

Когда вызывается этот метод, запускается волшебный метод, а затем каждый класс поставщика просматривается, чтобы выяснить, существует ли этот метод. Пока Base.php Установлено, что этот метод существует, и поставщиком, который будет использоваться в настоящее время, является Base.php Форматирующим элементом является случайный элемент() Метод.

Затем вам нужно сохранить соответствующую связь в базе, которая существует random Element (), чтобы избежать повторного обхода всех поставщиков в следующий раз, что является $this->форматеры Причины реализации.

Этот метод возвращает соответствующих поставщиков и для вопросов, а затем проходит через call_user_func_array Вызовите и верните результат.

До сих пор полный притворщик Процесс генерации и вызова объектов завершен.

Оригинал: “https://developpaper.com/faker-virtual-data-filling-and-source-parsing/”