Maison > Article > développement back-end > Introduction détaillée du remplissage de données virtuelles Faker (avec exemples)
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__ . '/vendor/fzaninotto/faker/src/autoload.php'; $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.
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).
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
.
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 ->
public function addProvider($provider) { array_unshift($this->providers, $provider); }
Appel d'objet faker$generator
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__call
farmat
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
$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()
et renvoyez le résultat. $this->formatters
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!