Maison  >  Article  >  développement back-end  >  Introduction détaillée du remplissage de données virtuelles Faker (avec exemples)

Introduction détaillée du remplissage de données virtuelles Faker (avec exemples)

不言
不言avant
2019-01-29 11:19:224009parcourir

Ce que cet article vous apporte concerne la méthode (exemple de code) d'ouverture d'un nouveau lien de page dans le développement d'un mini-programme. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. .

Faker est un générateur de données factices qui peut être utilisé pour alimenter des bases de données à des fins de tests de résistance ou créer des documents XML élégants.

Installation

Si le projet prend en charge composer, utilisez la commande suivante pour l'installer. S'il n'est pas pris en charge, veuillez télécharger le code source depuis le référentiel Github de Faker et le placer dans le dossier du pack d'extension du projet.

composer require fzaninotto/faker

Pour démontrer la fonctionnalité, j'ai créé un nouveau projet en utilisant la commande suivante :

// 创建新项目文件夹
mkdir data-seeder

cd data-seeder
// 安装 faker 扩展
composer require fzaninotto/faker

Utilisation de base

À la racine répertoire Créez le fichier de test test.php ci-dessous, entrez le code suivant :

<?php
require_once __DIR__ . &#39;/vendor/fzaninotto/faker/src/autoload.php&#39;;
$faker = Faker\Factory::create();
echo $faker->name, "\n";
echo $faker->address, "\n";
echo $faker->text;

Exécutez le script en mode CLI, php test.php affichez les résultats de sortie. Les résultats de faker sont générés aléatoirement :

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.

noms propres de faker

fake définit quelques noms propres pour nous aider à comprendre ses idées de conception. Comprendre ces concepts est très utile. utile pour comprendre son code source.

Formatters

En plus des trois attributs ci-dessus, faker fournit également un grand nombre de données de simulation parmi lesquelles choisir. Chaque attribut du générateur (tel que name, address et lorem utilisés ci-dessus) est appelé un formater (formatteurs).

Fournisseurs

Il existe de nombreux types de données que nous devons remplir, telles que

  • Données aléatoires de base : entiers, nombres à virgule flottante, lettres

  • Informations aléatoires sur les caractères : nom, prénom, prénom, etc.

  • Numéro aléatoire : numéro de téléphone portable, numéro de téléphone

Faker définit chaque catégorie comme un fournisseur. Visualisez data-seeder/vendor/fzaninotto/faker/src/Faker/Provider pour voir les fichiers de classe des différents fournisseurs, ainsi que les fichiers des packages de langue.

Analyse du code source

Le pack d'extension Faker est de petite taille mais contient tous les éléments essentiels et est très précieux pour l'apprentissage.

Génération d'objets faker

Afficher la méthode d'usine du générateur de 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;
}

Le paramètre locale est le package de langue, la valeur par défaut est en_US l'anglais américain. Tous les modules linguistiques pris en charge peuvent être consultés dans le répertoire data-seeder/vendor/fzaninotto/faker/src/Faker/Provider.

Les fournisseurs par défaut (le fournisseur a été mentionné ci-dessus) peuvent être trouvés dans une correspondance individuelle dans le répertoire des fournisseurs ci-dessus. Parcourez le tableau et ajoutez le fournisseur correspondant au générateur $generator.

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));
}

getProviderClassname recherchera la classe du fournisseur selon la logique suivante. Si elle n'existe pas dans le fichier actuel, elle recherchera dans le fichier de niveau suivant. ne le trouve pas, une exception sera levée :

Le dossier du module linguistique transmis par l'utilisateur -> Le dossier du module linguistique en_US par défaut ->

addProvider est très simple, il suffit d'ajouter le fournisseur trouvé en tête du tableau, et le tableau est stocké dans les propriétés de l'objet

qui sera renvoyé.
public function addProvider($provider)
{
    array_unshift($this->providers, $provider);
}

Appel d'objet faker$generator

Lors de l'utilisation de l'objet renvoyé par faker, il existe deux manières : appeler des attributs et appeler des méthodes. Ces appels déclencheront la méthode magique :

La logique des deux est similaire. Voici la méthode magique

la plus gênante. La méthode magique transmettra le nom de la méthode appelée et les paramètres dans le <.> méthode.
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__callfarmat

stocke les informations relatives au formateur mentionné dans le nom propre du faker. Pour faciliter la compréhension, voici un exemple de prise d'un élément aléatoire dans un tableau pour illustrer ces concepts abstraits.

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));
}

Lorsque cette méthode est appelée, la méthode magique est déclenchée, puis parcourt chaque classe de fournisseur pour savoir si cette méthode existe. Jusqu'à ce que cette méthode soit trouvée dans $this->formatters, le fournisseur à utiliser est

et le formateur est la méthode
$faker->randomElement(['a', 'b', 'c']);
.

Base.php Ensuite, vous devez stocker la relation correspondante de randomeElement() dans Base pour éviter de parcourir à nouveau tous les fournisseurs la prochaine fois. C'est la raison pour laquelle Base.php est implémenté. randomElement()

Une fois que cette méthode a renvoyé le fournisseur et les formateurs correspondants, appelez-la via

et renvoyez le résultat. $this->formatters

À ce stade, un processus complet

de génération et d'appel d'objets est terminé. call_user_func_array

faker

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer