laravel faker 数据填充 中文数据填充 单元测试数据填充 数据的类型有哪些
laravel faker 数据填充 中文数据填充 单元测试数据填充 数据的类型有哪些?
Installation 安装
laravel5 已经安装,这里不需要安装了,其他框架,可以借鉴。
composer require fzaninotto/faker
Basic Usage 基本用法
Use Faker\Factory::create()
要创建和初始化一个faker生成器,它可以通过访问您想要的数据类型的属性来生成数据。
1 <?php 2 // 包含 Faker 的 autoloader 3 require_once '/path/to/Faker/src/autoload.php'; 4 // 或者,使用另一个psr-0兼容的自动加载器(例如,如Symfony2类加载器) 5 6 // 使用工厂创建一个Faker生成器实例 7 $faker = Faker\Factory::create('zh_CN'); //如果使用中文填充数据可以加入 ‘zh_CN’, 不需要的可以留空 8 9 // 通过访问属性生成数据 10 echo $faker->name; 11 // 'Lucy Cechtelar'; 12 echo $faker->address; 13 // "426 Jordy Lodge 14 // Cartwrightshire, SC 88120-6700" 15 echo $faker->text; 16 // Dolores sit sint laboriosam dolorem culpa et autem. Beatae nam sunt fugit 17 // et sit et mollitia sed. 18 // Fuga deserunt tempora facere magni omnis. Omnis quia temporibus laudantium 19 // sit minima sint.
中文参考:https://github.com/fzaninotto/Faker/tree/master/src/Faker/Provider/zh_CN
即使这个例子显示了一个属性访问, 每个调用 $faker->name 的调用都产生一个不同的(随机的)结果. 这是因为 Faker 调用了__get() 魔术方法, 并且将
Faker\Generator->$property
调用给 Faker\Generator->format($property)
.
提示:对于快速生成的假数据,您还可以使用Faker作为命令行工具,这要归功于伪造者-cli。
1 <?php 2 for ($i=0; $i < 10; $i++) { 3 echo $faker->name, "\n"; 4 } 5 // Adaline Reichel 6 // Dr. Santa Prosacco DVM 7 // Noemy Vandervort V 8 // Lexi O'Conner 9 // Gracie Weber 10 // Roscoe Johns 11 // Emmett Lebsack 12 // Keegan Thiel 13 // Wellington Koelpin II 14 // Ms. Karley Kiehn V
Formatters 格式化器
每个生成器属性 (例如 name
, address
, and lorem
) 都被称谓 "formatters". 一个faker生成器有很多, 打包在“提供者”中。下面是默认区域中绑定的格式化程序的列表。
Faker\Provider\Base 基本
randomDigit // 7 randomDigitNotNull // 5 randomNumber($nbDigits = NULL, $strict = false) // 79907610 randomFloat($nbMaxDecimals = NULL, $min = 0, $max = NULL) // 48.8932 numberBetween($min = 1000, $max = 9000) // 8567 randomLetter // 'b' // 返回一个给定数组的随机有序序列 randomElements($array = array ('a','b','c'), $count = 1) // array('c') randomElement($array = array ('a','b','c')) // 'b' shuffle('hello, world') // 'rlo,h eoldlw' shuffle(array(1, 2, 3)) // array(2, 1, 3) numerify('Hello ###') // 'Hello 609' lexify('Hello ???') // 'Hello wgt' bothify('Hello ##??') // 'Hello 42jz' asciify('Hello ***') // 'Hello R6+' regexify('[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}'); // sm0@y8k96a.ej
Faker\Provider\Lorem 文本
word // 'aut' words($nb = 3, $asText = false) // array('porro', 'sed', 'magni') sentence($nbWords = 6, $variableNbWords = true) // 'Sit vitae voluptas sint non voluptates.' sentences($nb = 3, $asText = false) // array('Optio quos qui illo error.', 'Laborum vero a officia id corporis.', 'Saepe provident esse hic eligendi.') paragraph($nbSentences = 3, $variableNbSentences = true) // 'Ut ab voluptas sed a nam. Sint autem inventore aut officia aut aut blanditiis. Ducimus eos odit amet et est ut eum.' paragraphs($nb = 3, $asText = false) // array('Quidem ut sunt et quidem est accusamus aut. Fuga est placeat rerum ut. Enim ex eveniet facere sunt.', 'Aut nam et eum architecto fugit repellendus illo. Qui ex esse veritatis.', 'Possimus omnis aut incidunt sunt. Asperiores incidunt iure sequi cum culpa rem. Rerum exercitationem est rem.') text($maxNbChars = 200) // 'Fuga totam reiciendis qui architecto fugiat nemo. Consequatur recusandae qui cupiditate eos quod.'
Faker\Provider\en_US\Person 人物
title($gender = null|'male'|'female') // 'Ms.' titleMale // 'Mr.' titleFemale // 'Ms.' suffix // 'Jr.' name($gender = null|'male'|'female') // 'Dr. Zane Stroman' firstName($gender = null|'male'|'female') // 'Maynard' firstNameMale // 'Maynard' firstNameFemale // 'Rachel' lastName // 'Zulauf'
Faker\Provider\en_US\Address 地址
cityPrefix // 'Lake' secondaryAddress // 'Suite 961' state // 'NewMexico' stateAbbr // 'OH' citySuffix // 'borough' streetSuffix // 'Keys' buildingNumber // '484' city // 'West Judge' streetName // 'Keegan Trail' streetAddress // '439 Karley Loaf Suite 897' postcode // '17916' address // '8888 Cummings Vista Apt. 101, Susanbury, NY 95473' country // 'Falkland Islands (Malvinas)' latitude($min = -90, $max = 90) // 77.147489 longitude($min = -180, $max = 180) // 86.211205
Faker\Provider\en_US\PhoneNumber 电话号码
phoneNumber // '201-886-0269 x3767' tollFreePhoneNumber // '(888) 937-7238' e164PhoneNumber // '+27113456789'
Faker\Provider\en_US\Company 公司
catchPhrase // 'Monitored regional contingency' bs // 'e-enable robust architectures' company // 'Bogan-Treutel' companySuffix // 'and Sons' jobTitle // 'Cashier'
Faker\Provider\en_US\Text 文本
realText($maxNbChars = 200, $indexSize = 2) // "And yet I wish you could manage it?) 'And what are they made of?' Alice asked in a shrill, passionate voice. 'Would YOU like cats if you were never even spoke to Time!' 'Perhaps not,' Alice replied."
Faker\Provider\DateTime 日期时间
unixTime($max = 'now') // 58781813 dateTime($max = 'now', $timezone = date_default_timezone_get()) // DateTime('2008-04-25 08:37:17', 'UTC') dateTimeAD($max = 'now', $timezone = date_default_timezone_get()) // DateTime('1800-04-29 20:38:49', 'Europe/Paris') iso8601($max = 'now') // '1978-12-09T10:10:29+0000' date($format = 'Y-m-d', $max = 'now') // '1979-06-09' time($format = 'H:i:s', $max = 'now') // '20:49:42' dateTimeBetween($startDate = '-30 years', $endDate = 'now', $timezone = date_default_timezone_get()) // DateTime('2003-03-15 02:00:49', 'Africa/Lagos') dateTimeInInterval($startDate = '-30 years', $interval = '+ 5 days', $timezone = date_default_timezone_get()) // DateTime('2003-03-15 02:00:49', 'Antartica/Vostok') dateTimeThisCentury($max = 'now', $timezone = date_default_timezone_get()) // DateTime('1915-05-30 19:28:21', 'UTC') dateTimeThisDecade($max = 'now', $timezone = date_default_timezone_get()) // DateTime('2007-05-29 22:30:48', 'Europe/Paris') dateTimeThisYear($max = 'now', $timezone = date_default_timezone_get()) // DateTime('2011-02-27 20:52:14', 'Africa/Lagos') dateTimeThisMonth($max = 'now', $timezone = date_default_timezone_get()) // DateTime('2011-10-23 13:46:23', 'Antarctica/Vostok') amPm($max = 'now') // 'pm' dayOfMonth($max = 'now') // '04' dayOfWeek($max = 'now') // 'Friday' month($max = 'now') // '06' monthName($max = 'now') // 'January' year($max = 'now') // '1993' century // 'VI' timezone // 'Europe/Paris'
Faker\Provider\Internet 互联网
email // 'tkshlerin@collins.com' safeEmail // 'king.alford@example.org' freeEmail // 'bradley72@gmail.com' companyEmail // 'russel.durward@mcdermott.org' freeEmailDomain // 'yahoo.com' safeEmailDomain // 'example.org' userName // 'wade55' password // 'k&|X+a45*2[' domainName // 'wolffdeckow.net' domainWord // 'feeney' tld // 'biz' url // 'http://www.skilesdonnelly.biz/aut-accusantium-ut-architecto-sit-et.html' slug // 'aut-repellat-commodi-vel-itaque-nihil-id-saepe-nostrum' ipv4 // '109.133.32.252' localIpv4 // '10.242.58.8' ipv6 // '8e65:933d:22ee:a232:f1c1:2741:1f10:117c' macAddress // '43:85:B7:08:10:CA'
Faker\Provider\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)'
Faker\Provider\Payment 支付
creditCardType // 'MasterCard' creditCardNumber // '4485480221084675' creditCardExpirationDate // 04/13 creditCardExpirationDateString // '04/13' creditCardDetails // array('MasterCard', '4485480221084675', 'Aleksander Nowak', '04/13') // 生成一个随机的国际银行账号(IBAN). 设置 $countryCode 为空 生成一个随机的国家 iban($countryCode) // 'IT31A8497112740YZ575DJ28BP4' swiftBicNumber // 'RZTIAT22263'
Faker\Provider\Color 颜色
hexcolor // '#fa3cc2' rgbcolor // '0,255,122' rgbColorAsArray // array(0,255,122) rgbCssColor // 'rgb(0,255,122)' safeColorName // 'fuchsia' colorName // 'Gainsbor'
Faker\Provider\File 文件
fileExtension // 'avi' mimeType // 'video/x-msvideo' // 将一个随机文件从源文件复制到目标目录,并返回fullpath或filename file($sourceDir = '/tmp', $targetDir = '/tmp') // '/path/to/targetDir/13b73edae8443990be1aa8f1a483bc27.jpg' file($sourceDir, $targetDir, false) // '13b73edae8443990be1aa8f1a483bc27.jpg'
Faker\Provider\Image 图片
// Image generation provided by LoremPixel (http://lorempixel.com/) imageUrl($width = 640, $height = 480) // 'http://lorempixel.com/640/480/' imageUrl($width, $height, 'cats') // 'http://lorempixel.com/800/600/cats/' imageUrl($width, $height, 'cats', true, 'Faker') // 'http://lorempixel.com/800/400/cats/Faker' imageUrl($width, $height, 'cats', true, 'Faker', true) // 'http://lorempixel.com/grey/800/400/cats/Faker/' Monochrome image image($dir = '/tmp', $width = 640, $height = 480) // '/tmp/13b73edae8443990be1aa8f1a483bc27.jpg' image($dir, $width, $height, 'cats') // 'tmp/13b73edae8443990be1aa8f1a483bc27.jpg' it's a cat! image($dir, $width, $height, 'cats', false) // '13b73edae8443990be1aa8f1a483bc27.jpg' it's a filename without path image($dir, $width, $height, 'cats', true, false) // it's a no randomize images (default: `true`) image($dir, $width, $height, 'cats', true, true, 'Faker') // 'tmp/13b73edae8443990be1aa8f1a483bc27.jpg' it's a cat with 'Faker' text. Default, `null`.
Faker\Provider\Uuid UUID
uuid // '7e57d004-2b97-0e7a-b45f-5387367791cd'
Faker\Provider\Barcode 条形码
ean13 // '4006381333931' ean8 // '73513537' isbn13 // '9790404436093' isbn10 // '4881416324'
Faker\Provider\Miscellaneous 各种各样的
boolean // false boolean($chanceOfGettingTrue = 50) // true md5 // 'de99a620c50f2990e87144735cd357e7' sha1 // 'f08e7f04ca1a413807ebc47551a40a20a0b4de5c' sha256 // '0061e4c60dac5c1d82db0135a42e00c89ae3a333e7c26485321f24348c7e98a5' locale // en_UK countryCode // UK languageCode // en currencyCode // EUR emoji // 😁
Faker\Provider\Biased 偏向的
// 在10到20之间得到一个随机数, // 有更多的几率接近20 biasedNumberBetween($min = 10, $max = 20, $function = 'sqrt')
Faker\Provider\HtmlLorem html文本
//生成一个不超过2层的HTML文档,在任何级别上都不超过3个元素。 randomHtml(2,3) // <html><head><title>Aut illo dolorem et accusantium eum.</title></head><body><form action="example.com" method="POST"><label for="username">sequi</label><input type="text" id="username"><label for="password">et</label><input type="password" id="password"></form><b>Id aut saepe non mollitia voluptas voluptas.</b><table><thead><tr><tr>Non consequatur.</tr><tr>Incidunt est.</tr><tr>Aut voluptatem.</tr><tr>Officia voluptas rerum quo.</tr><tr>Asperiores similique.</tr></tr></thead><tbody><tr><td>Sapiente dolorum dolorem sint laboriosam commodi qui.</td><td>Commodi nihil nesciunt eveniet quo repudiandae.</td><td>Voluptates explicabo numquam distinctio necessitatibus repellat.</td><td>Provident ut doloremque nam eum modi aspernatur.</td><td>Iusto inventore.</td></tr><tr><td>Animi nihil ratione id mollitia libero ipsa quia tempore.</td><td>Velit est officia et aut tenetur dolorem sed mollitia expedita.</td><td>Modi modi repudiandae pariatur voluptas rerum ea incidunt non molestiae eligendi eos deleniti.</td><td>Exercitationem voluptatibus dolor est iste quod molestiae.</td><td>Quia reiciendis.</td></tr><tr><td>Inventore impedit exercitationem voluptatibus rerum cupiditate.</td><td>Qui.</td><td>Aliquam.</td><td>Autem nihil aut et.</td><td>Dolor ut quia error.</td></tr><tr><td>Enim facilis iusto earum et minus rerum assumenda quis quia.</td><td>Reprehenderit ut sapiente occaecati voluptatum dolor voluptatem vitae qui velit.</td><td>Quod fugiat non.</td><td>Sunt nobis totam mollitia sed nesciunt est deleniti cumque.</td><td>Repudiandae quo.</td></tr><tr><td>Modi dicta libero quisquam doloremque qui autem.</td><td>Voluptatem aliquid saepe laudantium facere eos sunt dolor.</td><td>Est eos quis laboriosam officia expedita repellendus quia natus.</td><td>Et neque delectus quod fugit enim repudiandae qui.</td><td>Fugit soluta sit facilis facere repellat culpa magni voluptatem maiores tempora.</td></tr><tr><td>Enim dolores doloremque.</td><td>Assumenda voluptatem eum perferendis exercitationem.</td><td>Quasi in fugit deserunt ea perferendis sunt nemo consequatur dolorum soluta.</td><td>Maxime repellat qui numquam voluptatem est modi.</td><td>Alias rerum rerum hic hic eveniet.</td></tr><tr><td>Tempore voluptatem.</td><td>Eaque.</td><td>Et sit quas fugit iusto.</td><td>Nemo nihil rerum dignissimos et esse.</td><td>Repudiandae ipsum numquam.</td></tr><tr><td>Nemo sunt quia.</td><td>Sint tempore est neque ducimus harum sed.</td><td>Dicta placeat atque libero nihil.</td><td>Et qui aperiam temporibus facilis eum.</td><td>Ut dolores qui enim et maiores nesciunt.</td></tr><tr><td>Dolorum totam sint debitis saepe laborum.</td><td>Quidem corrupti ea.</td><td>Cum voluptas quod.</td><td>Possimus consequatur quasi dolorem ut et.</td><td>Et velit non hic labore repudiandae quis.</td></tr></tbody></table></body></html>
Modifiers 修改器
Faker提供三个特殊的提供者 providers, unique()
, optional()
, valid()
, 在任何提供者之前调用。.
// unique() 强制 providers 返回一个唯一的值 $values = array(); for ($i=0; $i < 10; $i++) { // 得到一个随机数字,但总是一个新的,以避免重复 $values []= $faker->unique()->randomDigit; } print_r($values); // [4, 1, 8, 5, 0, 2, 6, 9, 7, 3] // 只有有限范围的提供者才会抛出一个异常,当没有新的惟一值时 $values = array(); try { for ($i=0; $i < 10; $i++) { $values []= $faker->unique()->randomDigitNotNull; } } catch (\OverflowException $e) { echo "There are only 9 unique digits not null, Faker can't generate 10 of them!"; } // 您可以通过传递true作为第一个参数来重置所有提供者的惟一修饰符 $faker->unique($reset = true)->randomDigitNotNull; // 不会抛出 OverflowException 异常 因为 unique() 被重置 // 提示: unique() 每个提供者都保留一个值数组 // optional() 有时绕过提供者返回一个默认值(默认值为NULL) $values = array(); for ($i=0; $i < 10; $i++) { // 得到一个随机数字,但有时也为空 $values []= $faker->optional()->randomDigit; } print_r($values); // [1, 4, null, 9, 5, null, null, 4, 6, null] // optional() 接受一个权重参数来指定接收默认值的概率。 // 0 总是返回默认值;1将始终返回提供者。默认的权重是0.5(50%的几率)。 $faker->optional($weight = 0.1)->randomDigit; // 90% chance of NULL $faker->optional($weight = 0.9)->randomDigit; // 10% chance of NULL // optional() 接受默认参数,以指定要返回的默认值。 // 默认为空。 $faker->optional($weight = 0.5, $default = false)->randomDigit; // 50% chance of FALSE $faker->optional($weight = 0.9, $default = 'abc')->word; // 10% chance of 'abc' // valid() 只根据传递的验证器函数接受有效值 $values = array(); $evenValidator = function($digit) { return $digit % 2 === 0; }; for ($i=0; $i < 10; $i++) { $values []= $faker->valid($evenValidator)->randomDigit; } print_r($values); // [0, 4, 8, 4, 2, 6, 0, 8, 8, 6] // 就像 unique(), valid() 当它不能产生有效值时抛出一个溢出异常 $values = array(); try { $faker->valid($evenValidator)->randomElement(1, 3, 5, 7, 9); } catch (\OverflowException $e) { echo "Can't pick an even number in that set!"; }
Localization 地方化
Faker\Factory
可以将语言环境作为参数,返回本地化的数据. 如果没有找到本地化的提供者, 那么 factory 就会回到默认的语言环境 (en_US).
<?php $faker = Faker\Factory::create('fr_FR'); // create a French faker for ($i=0; $i < 10; $i++) { echo $faker->name, "\n"; } // Luce du Coulon // Auguste Dupont // Roger Le Voisin // Alexandre Lacroix // Jacques Humbert-Roy // Thérèse Guillet-Andre // Gilles Gros-Bodin // Amélie Pires // Marcel Laporte // Geneviève Marchal
您可以在源代码中检查可用的 Faker 区域, 提供者目录下 . Faker的本地化是一个持续的过程, 我们需要你的帮助. 不要犹豫,创建本地化的提供商到您自己的语言环境,并提交一个PR!
Populating Entities Using an ORM or an ODM 使用ORM或ODM填充实体
Faker 为对象-关系和对象文档映射器提供适配器 (currently, Propel, Doctrine2, CakePHP, Spot2, Mandango and Eloquent are supported). 这些适配器通过ORM库提供的实体类(或使用ODM库提供的文档类的文档存储库)来简化数据库的数量。To populate entities, create a 新的populator类(使用生成器实例作为参数), 然后列出必须生成的所有实体的类和数量。要启动实际的数据填充,请调用 execute() 方法。
下面是一个示例,展示如何填充5个 Author 和10个 Book 对象:
<?php $generator = \Faker\Factory::create(); $populator = new Faker\ORM\Propel\Populator($generator); $populator->addEntity('Author', 5); $populator->addEntity('Book', 10); $insertedPKs = $populator->execute();
填充器使用名称和列类型猜测器来填充每个列,并使用相关的数据。 例如,Faker用第一个名字格式化器来填充一个名为 first name 的列,以及一个使用 dateTime 格式器的时间戳类型的列。
由此产生的实体是一致的。如果Faker错误地解释了一个列名,您仍然可以指定一个定制的闭包来填充一个特定的列,使用第三个参数对addEntity():
<?php $populator->addEntity('Book', 5, array( 'ISBN' => function() use ($generator) { return $generator->ean13(); } ));
在本例中,Faker 将猜测除 ISBN 之外的所有列的格式化程序,其中使用了给定的匿名函数。
提示:忽略某些列,在addEntity()的第三个参数中为列名指定null。这通常对于一个行为添加的列来说是必要的:
<?php $populator->addEntity('Book', 5, array( 'CreatedAt' => null, 'UpdatedAt' => null, ));
当然,Faker并没有填充自动递增的主键。此外, Faker\ORM\Propel\Populator::execute()返回被按类索引插入的主键的列表:
<?php print_r($insertedPKs); // array( // 'Author' => (34, 35, 36, 37, 38), // 'Book' => (456, 457, 458, 459, 470, 471, 472, 473, 474, 475) // )
在前面的例子中,Book和Author模型共享一段关系。由于作者实体是首先填充的,所以Faker足够聪明,可以将填充的图书实体与一个填充的作者实体关联起来。
<?php $populator->addEntity('Book', 5, array(), array( function($book) { $book->publish(); }, ));
Seeding the Generator 数据生成器
您可能希望得到相同的生成的数据,例如,在使用Faker进行单元测试时。生成器提供一个 seed()
方法, 该方法为随机数生成器提供种子。同一个脚本两次调用相同的脚本会产生相同的结果。
<?php $faker = Faker\Factory::create(); $faker->seed(1234); echo $faker->name; // 'Jess Mraz I';
提示:DateTime格式器不会复制相同的假数据,如果您不修复$max的值:
<?php // 即使在生成数据时,这条线也会返回不同的结果,因为$max会改变 $faker->dateTime(); // 相当于 $faker->dateTime($max = 'now') // 确保你修改了$max参数 $faker->dateTime('2014-02-25 08:37:17'); // 当数据被生成时,将会返回相同的日期提示:如果使用rand()php函数,格式化程序不会复制相同的假数据。使用$faker或mt_rand()代替:
<?php // bad $faker->realText(rand(10,20)); // good $faker->realText($faker->numberBetween(10,20));
Faker Internals: Understanding Providers Faker内部:了解提供者
一个 Faker\Generator
独自不可以做太多工作. 它需要 Faker\Provider
对象将数据生成委托给它们. Faker\Factory::create()
实际上创建了一个与默认提供程序捆绑在一起的Faker\Generato。就是下面这种情况:
<?php $faker = new Faker\Generator(); $faker->addProvider(new Faker\Provider\en_US\Person($faker)); $faker->addProvider(new Faker\Provider\en_US\Address($faker)); $faker->addProvider(new Faker\Provider\en_US\PhoneNumber($faker)); $faker->addProvider(new Faker\Provider\en_US\Company($faker)); $faker->addProvider(new Faker\Provider\Lorem($faker)); $faker->addProvider(new Faker\Provider\Internet($faker));
当您尝试访问$faker对象上的一个属性时,生成器会查找与它相连的所有提供程序中相同名称的方法。 例如, 调用$faker->name
触发了调用 Faker\Provider\Person::name()
. 由于Faker从最后一个提供程序开始,您可以轻松地覆盖现有的格式化程序:只需添加一个包含您想要覆盖的格式化器的方法的提供者。
这意味着您可以轻松地将自己的提供者添加到一个 Faker\Generator 实例中。提供者通常是扩展 \Faker\Provider\Base 的类
. 这个父类允许您使用类似的方法 lexify()
或 randomNumber()
; 通过受保护的 $generator 属性,它还允许您访问其他提供者的格式化程序。新的格式化程序是提供程序类的公共方法。
下面是填充图书数据的示例提供者:
<?php namespace Faker\Provider; class Book extends \Faker\Provider\Base { public function title($nbWords = 5) { $sentence = $this->generator->sentence($nbWords); return substr($sentence, 0, strlen($sentence) - 1); } public function ISBN() { return $this->generator->ean13(); } }
要注册这个提供者,只需向现有的生成器添加一个新的\Faker\Provider\Book
实例:
<?php $faker->addProvider(new \Faker\Provider\Book($faker));
现在您可以使用这两个新的格式器,就像任何其他的Faker格式化程序一样:
<?php $book = new Book(); $book->setTitle($faker->title); $book->setISBN($faker->ISBN); $book->setSummary($faker->text); $book->setPrice($faker->randomNumber(2));
提示:提供程序也可以是一个普通的PHP对象。在这种情况下,提供者的所有公共方法都可用于生成器。
Real Life Usage 现实生活中使用
下面的脚本生成一个有效的XML文档:
<?php require_once '/path/to/Faker/src/autoload.php'; $faker = Faker\Factory::create(); ?> <?xml version="1.0" encoding="UTF-8"?> <contacts> <?php for ($i=0; $i < 10; $i++): ?> <contact firstName="<?php echo $faker->firstName ?>" lastName="<?php echo $faker->lastName ?>" email="<?php echo $faker->email ?>"> <phone number="<?php echo $faker->phoneNumber ?>"/> <?php if ($faker->boolean(25)): ?> <birth date="<?php echo $faker->dateTimeThisCentury->format('Y-m-d') ?>" place="<?php echo $faker->city ?>"/> <?php endif; ?> <address> <street><?php echo $faker->streetAddress ?></street> <city><?php echo $faker->city ?></city> <postcode><?php echo $faker->postcode ?></postcode> <state><?php echo $faker->state ?></state> </address> <company name="<?php echo $faker->company ?>" catchPhrase="<?php echo $faker->catchPhrase ?>"> <?php if ($faker->boolean(33)): ?> <offer><?php echo $faker->bs ?></offer> <?php endif; ?> <?php if ($faker->boolean(33)): ?> <director name="<?php echo $faker->name ?>" /> <?php endif; ?> </company> <?php if ($faker->boolean(15)): ?> <details> <![CDATA[ <?php echo $faker->text(400) ?> ]]> </details> <?php endif; ?> </contact> <?php endfor; ?> </contacts>
运行这个脚本会生成一个看起来像这样的文档:
<?xml version="1.0" encoding="UTF-8"?> <contacts> <contact firstName="Ona" lastName="Bednar" email="schamberger.frank@wuckert.com"> <phone number="1-265-479-1196x714"/> <address> <street>182 Harrison Cove</street> <city>North Lloyd</city> <postcode>45577</postcode> <state>Alabama</state> </address> <company name="Veum, Funk and Shanahan" catchPhrase="Function-based stable solution"> <offer>orchestrate compelling web-readiness</offer> </company> <details> <![CDATA[ Alias accusantium voluptatum autem nobis cumque neque modi. Voluptatem error molestiae consequatur alias. Illum commodi molestiae aut repellat id. Et sit consequuntur aut et ullam asperiores. Cupiditate culpa voluptatem et mollitia dolor. Nisi praesentium qui ut. ]]> </details> </contact> <contact firstName="Aurelie" lastName="Paucek" email="alfonzo55@durgan.com"> <phone number="863.712.1363x9425"/> <address> <street>90111 Hegmann Inlet</street> <city>South Geovanymouth</city> <postcode>69961-9311</postcode> <state>Colorado</state> </address> <company name="Krajcik-Grimes" catchPhrase="Switchable cohesive instructionset"> </company> </contact> <contact firstName="Clifton" lastName="Kshlerin" email="kianna.wiegand@framiwyman.info"> <phone number="692-194-4746"/> <address> <street>9791 Nona Corner</street> <city>Harberhaven</city> <postcode>74062-8191</postcode> <state>RhodeIsland</state> </address> <company name="Rosenbaum-Aufderhar" catchPhrase="Realigned asynchronous encryption"> </company> </contact> <contact firstName="Alexandre" lastName="Orn" email="thelma37@erdmancorwin.biz"> <phone number="189.655.8677x027"/> <address> <street>11161 Schultz Via</street> <city>Feilstad</city> <postcode>98019</postcode> <state>NewJersey</state> </address> <company name="O'Hara-Prosacco" catchPhrase="Re-engineered solution-oriented algorithm"> <director name="Dr. Berenice Auer V" /> </company> <details> <![CDATA[ Ut itaque et quaerat doloremque eum praesentium. Rerum in saepe dolorem. Explicabo qui consequuntur commodi minima rem. Harum temporibus rerum dolores. Non molestiae id dolorem placeat. Aut asperiores nihil eius repellendus. Vero nihil corporis voluptatem explicabo commodi. Occaecati omnis blanditiis beatae quod aspernatur eos. ]]> </details> </contact> <contact firstName="Katelynn" lastName="Kohler" email="reinger.trudie@stiedemannjakubowski.com"> <phone number="(665)713-1657"/> <address> <street>6106 Nader Village Suite 753</street> <city>McLaughlinstad</city> <postcode>43189-8621</postcode> <state>Missouri</state> </address> <company name="Herman-Tremblay" catchPhrase="Object-based explicit service-desk"> <offer>expedite viral synergies</offer> <director name="Arden Deckow" /> </company> </contact> <contact firstName="Blanca" lastName="Stark" email="tad27@feest.net"> <phone number="168.719.4692x87177"/> <address> <street>7546 Kuvalis Plaza</street> <city>South Wilfrid</city> <postcode>77069</postcode> <state>Georgia</state> </address> <company name="Upton, Braun and Rowe" catchPhrase="Visionary leadingedge pricingstructure"> </company> </contact> <contact firstName="Rene" lastName="Spencer" email="anibal28@armstrong.info"> <phone number="715.222.0095x175"/> <birth date="2008-08-07" place="Zulaufborough"/> <address> <street>478 Daisha Landing Apt. 510</street> <city>West Lizethhaven</city> <postcode>30566-5362</postcode> <state>WestVirginia</state> </address> <company name="Wiza Inc" catchPhrase="Persevering reciprocal approach"> <offer>orchestrate dynamic networks</offer> <director name="Erwin Nienow" /> </company> <details> <![CDATA[ Dolorem consequatur voluptates unde optio unde. Accusantium dolorem est est architecto impedit. Corrupti et provident quo. Reprehenderit dolores aut quidem suscipit repudiandae corporis error. Molestiae enim aperiam illo. Et similique qui non expedita quia dolorum. Ex rem incidunt ea accusantium temporibus minus non. ]]> </details> </contact> <contact firstName="Alessandro" lastName="Hagenes" email="tbreitenberg@oharagorczany.com"> <phone number="1-284-958-6768"/> <address> <street>1251 Koelpin Mission</street> <city>North Revastad</city> <postcode>81620</postcode> <state>Maryland</state> </address> <company name="Stiedemann-Bruen" catchPhrase="Re-engineered 24/7 success"> </company> </contact> <contact firstName="Novella" lastName="Rutherford" email="claud65@bogisich.biz"> <phone number="(091)825-7971"/> <address> <street>6396 Langworth Hills Apt. 446</street> <city>New Carlos</city> <postcode>89399-0268</postcode> <state>Wyoming</state> </address> <company name="Stroman-Legros" catchPhrase="Expanded 4thgeneration moratorium"> <director name="Earlene Bayer" /> </company> </contact> <contact firstName="Andreane" lastName="Mann" email="meggie17@ornbaumbach.com"> <phone number="941-659-9982x5689"/> <birth date="1934-02-21" place="Stantonborough"/> <address> <street>2246 Kreiger Station Apt. 291</street> <city>Kaydenmouth</city> <postcode>11397-1072</postcode> <state>Wyoming</state> </address> <company name="Lebsack, Bernhard and Kiehn" catchPhrase="Persevering actuating framework"> <offer>grow sticky portals</offer> </company> <details> <![CDATA[ Quia dolor ut quia error libero. Enim facilis iusto earum et minus rerum assumenda. Quia doloribus et reprehenderit ut. Occaecati voluptatum dolor voluptatem vitae qui velit quia. Fugiat non in itaque sunt nobis totam. Sed nesciunt est deleniti cumque alias. Repudiandae quo aut numquam modi dicta libero. ]]> </details> </contact> </contacts>
Language specific formatters 特定于语言的格式器
Faker\Provider\ar_SA\Person
<?php echo $faker->idNumber; // 身份证号 echo $faker->nationalIdNumber // 公民身份证号 echo $faker->foreignerIdNumber // 外国人省份证号 echo $faker->companyIdNumber // 公司身份证号
Faker\Provider\ar_SA\Payment
<?php echo $faker->bankAccountNumber // "SA0218IBYZVZJSEC8536V4XC"
Faker\Provider\at_AT\Payment
<?php echo $faker->vat; // "AT U12345678" - 奥地利增值税 echo $faker->vat(false); // "ATU12345678" - 无间隔奥地利值加税号
Faker\Provider\bg_BG\Payment
<?php echo $faker->vat; // "BG 0123456789" - 保加利亚增值税率 echo $faker->vat(false); // "BG0123456789" - 无间隔的保加利亚增值税号
Faker\Provider\cs_CZ\Address
<?php echo $faker->region; // "Liberecký kraj"
Faker\Provider\cs_CZ\Company
<?php // Generates a valid IČO echo $faker->ico; // "69663963"
Faker\Provider\cs_CZ\DateTime
<?php echo $faker->monthNameGenitive; // "prosince" echo $faker->formattedDate; // "12. listopadu 2015"
Faker\Provider\cs_CZ\Person
<?php echo $faker->birthNumber; // "7304243452"
Faker\Provider\da_DK\Person
<?php // 生成一个随机的CPR值 echo $faker->cpr; // "051280-2387"
Faker\Provider\da_DK\Address
<?php // 生成一个随机的“市”名称 echo $faker->kommune; // "Frederiksberg" // 生成一个随机的区域名称 echo $faker->region; // "Region Sjælland"
Faker\Provider\da_DK\Company
<?php // 生成一个随机的CVR数字 echo $faker->cvr; // "32458723" // 生成一个随机的P值 echo $faker->p; // "5398237590"
Faker\Provider\de_DE\Payment
<?php echo $faker->bankAccountNumber; // "DE41849025553661169313" echo $faker->bank; // "Volksbank Stuttgart"
Faker\Provider\en_HK\Address
<?php // 根据香港常见的词汇,生成一个虚假的城镇名称。 echo $faker->town; // "Yuen Long" // 根据香港常见的单词生成一个假村名。 echo $faker->village; // "O Tau" // 根据香港常见的词汇,生成一个虚假的地产名称。 echo $faker->estate; // "Ching Lai Court"
Faker\Provider\en_HK\Phone
<?php // 生成一个香港移动电话号码(从5、6或9开始) echo $faker->mobileNumber; // "92150087" // 生成一个香港固定电话号码(从2或3开始) echo $faker->landlineNumber; // "32750132" // 生成一个香港传真号码(从7开始) echo $faker->faxNumber; // "71937729"
Faker\Provider\en_NG\Address
<?php // 生成一个随机的区域名称 echo $faker->region; // 'Katsina'
Faker\Provider\en_NG\Person
<?php // 生成一个随机的人名 echo $faker->name; // 'Oluwunmi Mayowa'
Faker\Provider\en_NZ\Phone
<?php // 生成一个单元(移动)电话号码 echo $faker->cellNumber; // "021 123 4567" // 产生免费电话号码 echo $faker->tollFreeNumber; // "0800 123 456" // 电话地区号 echo $faker->areaCode; // "03"
Faker\Provider\en_US\Payment
<?php echo $faker->bankAccountNumber; // '51915734310' echo $faker->bankRoutingNumber; // '212240302'
Faker\Provider\en_US\Person
<?php // 生成一个随机的社会安全号码 echo $faker->ssn; // '123-45-6789'
Faker\Provider\en_ZA\Company
<?php // 生成一个随机的公司注册号 echo $faker->companyNumber; // 1999/789634/01
Faker\Provider\en_ZA\Person
<?php // 生成一个随机的国家识别号码 echo $faker->idNumber; // 6606192211041 // 生成一个随机有效的许可码 echo $faker->licenceCode; // EB
Faker\Provider\en_ZA\PhoneNumber
<?php // 生成一个特殊的免费电话号码 echo $faker->tollFreeNumber; // 0800 555 5555 // 生成一个电话号码 echo $faker->mobileNumber; // 082 123 5555
Faker\Provider\es_ES\Person
<?php // 生成一个文档的文档(DNI) echo $faker->dni; // '77446565E'
Faker\Provider\es_ES\Payment
<?php // 生成一个财政(CIF)数字 echo $faker->vat; // "A35864370"
Faker\Provider\es_PE\Person
<?php // 生成一个秘鲁文档(DNI)数字 echo $faker->dni; // '83367512'
Faker\Provider\fa_IR\Address
<?php // 生成一个随机的构建名称 echo $faker->building; // "ساختمان آفتاب" // 返回一个随机的城市名称 echo $faker->city // "استان زنجان"
Faker\Provider\fa_IR\Company
<?php // 生成一个随机的契约类型 echo $faker->contract; // "رسمی"
Faker\Provider\fi_FI\Payment
<?php // 生成一个随机的银行帐号 echo $faker->bankAccountNumber; // "FI8350799879879616"
Faker\Provider\fi_FI\Person
<?php //产生一个有效的芬兰个人身份号码(在芬兰语中,亨利克隧道) echo $faker->personalIdentityNumber() // '170974-007J' //因为男性和女性的数字是不同的,所以你可以选择性别。 echo $faker->personalIdentityNumber(\DateTime::createFromFormat('Y-m-d', '2015-12-14'), 'female') // '141215A520B'
Faker\Provider\fr_BE\Payment
<?php echo $faker->vat; // "BE 0123456789" - 比利时增值税 echo $faker->vat(false); // "BE0123456789" - 无间隔的比利时值加税号
Faker\Provider\es_VE\Person
<?php // 生成一个 Cédula de 标识号,您可以通过一个参数来添加分隔符 echo $faker->nationalId; // 'V11223344'
Faker\Provider\es_VE\Company
<?php // 生成一个r.i.f number,你可以通过一个参数来添加分隔符 echo $faker->taxpayerIdentificationNumber; // 'J1234567891'
Faker\Provider\fr_FR\Address
<?php // 生成一个随机的部门名称 echo $faker->departmentName; // "Haut-Rhin" // 生成一个随机的部门号 echo $faker->departmentNumber; // "2B" // 生成一个随机的部门信息(部门号=部门名称) $faker->department; // array('18' => 'Cher'); // 生成一个随机的地区 echo $faker->region; // "Saint-Pierre-et-Miquelon"
Faker\Provider\fr_FR\Company
<?php // 产生一个随机的警号 echo $faker->siren; // 082 250 104 // 生成一个随机的SIRET数 echo $faker->siret; // 347 355 708 00224
Faker\Provider\fr_FR\Payment
<?php // 生成一个随机的增值税 echo $faker->vat; // FR 12 123 456 789
Faker\Provider\fr_FR\Person
<?php // 生成一个随机的 NIR / Sécurité 社会数字 echo $faker->nir; // 1 88 07 35 127 571 - 19
Faker\Provider\he_IL\Payment
<?php echo $faker->bankAccountNumber // "IL392237392219429527697"
Faker\Provider\hr_HR\Payment
<?php echo $faker->bankAccountNumber // "HR3789114847226078672"
Faker\Provider\hu_HU\Payment
<?php // 生成一个随机的银行帐号 echo $faker->bankAccountNumber; // "HU09904437680048220079300783"
Faker\Provider\id_ID\Person
<?php // 产生一个随机的 Nomor Induk Kependudukan (NIK) // 第一个参数是性别, 不管 Person::GENDER_MALE or Person::GENDER_FEMALE, 如果没有指定的随机性别 // 第二个参数是出生日期(DateTime对象),如果没有指定,则使用随机出生日期 echo $faker->nik(); // "8522246001570940"
Faker\Provider\it_IT\Company
<?php // 生成一个随机的增值税Id echo $faker->vatId(); // "IT98746784967"
Faker\Provider\it_IT\Person
<?php // 生成一个随机的税务Id码(编码fiscale) echo $faker->taxId(); // "DIXDPZ44E08F367A"
Faker\Provider\ja_JP\Person
<?php // Generates a 'kana' name echo $faker->kanaName($gender = null|'male'|'female') // "アオタ ミノル" // Generates a 'kana' first name echo $faker->firstKanaName($gender = null|'male'|'female') // "ヒデキ" // Generates a 'kana' first name on the male echo $faker->firstKanaNameMale // "ヒデキ" // Generates a 'kana' first name on the female echo $faker->firstKanaNameFemale // "マアヤ" // Generates a 'kana' last name echo $faker->lastKanaName; // "ナカジマ"
Faker\Provider\ka_GE\Payment
<?php // Generates a random bank account number echo $faker->bankAccountNumber; // "GE33ZV9773853617253389"
Faker\Provider\kk_KZ\Company
<?php // Generates an business identification number echo $faker->businessIdentificationNumber; // "150140000019"
Faker\Provider\kk_KZ\Payment
<?php // Generates a random bank name echo $faker->bank; // "Қазкоммерцбанк" // Generates a random bank account number echo $faker->bankAccountNumber; // "KZ1076321LO4H6X41I37"
Faker\Provider\kk_KZ\Person
<?php // Generates an individual identification number echo $faker->individualIdentificationNumber; // "780322300455" // Generates an individual identification number based on his/her birth date echo $faker->individualIdentificationNumber(new \DateTime('1999-03-01')); // "990301300455"
Faker\Provider\ko_KR\Address
<?php // Generates a metropolitan city echo $faker->metropolitanCity; // "서울특별시" // Generates a borough echo $faker->borough; // "강남구"
Faker\Provider\lt_LT\Payment
<?php echo $faker->bankAccountNumber // "LT300848876740317118"
Faker\Provider\lv_LV\Person
<?php // Generates a random personal identity card number echo $faker->personalIdentityNumber; // "140190-12301"
Faker\Provider\ne_NP\Address
<?php //Generates a Nepali district name echo $faker->district; //Generates a Nepali city name echo $faker->cityName;
Faker\Provider\nl_BE\Payment
<?php echo $faker->vat; // "BE 0123456789" - Belgian Value Added Tax number echo $faker->vat(false); // "BE0123456789" - unspaced Belgian Value Added Tax number
Faker\Provider\nl_NL\Company
<?php echo $faker->vat; // "NL123456789B01" - Dutch Value Added Tax number echo $faker->btw; // "NL123456789B01" - Dutch Value Added Tax number (alias)
Faker\Provider\nl_NL\Person
<?php echo $faker->idNumber; // "111222333" - Dutch Personal identification number (BSN)
Faker\Provider\nb_NO\Payment
<?php // Generates a random bank account number echo $faker->bankAccountNumber; // "NO3246764709816"
Faker\Provider\pl_PL\Person
<?php // Generates a random PESEL number echo $faker->pesel; // "40061451555" // Generates a random personal identity card number echo $faker->personalIdentityNumber; // "AKX383360" // Generates a random taxpayer identification number (NIP) echo $faker->taxpayerIdentificationNumber; // '8211575109'
Faker\Provider\pl_PL\Company
<?php // Generates a random REGON number echo $faker->regon; // "714676680" // Generates a random local REGON number echo $faker->regonLocal; // "15346111382836"
Faker\Provider\pl_PL\Payment
<?php // Generates a random bank name echo $faker->bank; // "Narodowy Bank Polski" // Generates a random bank account number echo $faker->bankAccountNumber; // "PL14968907563953822118075816"
Faker\Provider\pt_PT\Person
<?php // Generates a random taxpayer identification number (in portuguese - Número de Identificação Fiscal NIF) echo $faker->taxpayerIdentificationNumber; // '165249277'
Faker\Provider\pt_BR\Address
<?php // Generates a random region name echo $faker->region; // 'Nordeste' // Generates a random region abbreviation echo $faker->regionAbbr; // 'NE'
Faker\Provider\pt_BR\PhoneNumber
<?php echo $faker->areaCode; // 21 echo $faker->cellphone; // 9432-5656 echo $faker->landline; // 2654-3445 echo $faker->phone; // random landline, 8-digit or 9-digit cellphone number // Using the phone functions with a false argument returns unformatted numbers echo $faker->cellphone(false); // 74336667 // cellphone() has a special second argument to add the 9th digit. Ignored if generated a Radio number echo $faker->cellphone(true, true); // 98983-3945 or 7343-1290 // Using the "Number" suffix adds area code to the phone echo $faker->cellphoneNumber; // (11) 98309-2935 echo $faker->landlineNumber(false); // 3522835934 echo $faker->phoneNumber; // formatted, random landline or cellphone (obeying the 9th digit rule) echo $faker->phoneNumberCleared; // not formatted, random landline or cellphone (obeying the 9th digit rule)
Faker\Provider\pt_BR\Person
<?php // The name generator may include double first or double last names, plus title and suffix echo $faker->name; // 'Sr. Luis Adriano Sepúlveda Filho' // Valid document generators have a boolean argument to remove formatting echo $faker->cpf; // '145.343.345-76' echo $faker->cpf(false); // '45623467866' echo $faker->rg; // '84.405.736-3'
Faker\Provider\pt_BR\Company
<?php // Generates a Brazilian formatted and valid CNPJ echo $faker->cnpj; // '23.663.478/0001-24' echo $faker->cnpj(false); // '23663478000124'
Faker\Provider\ro_MD\Payment
<?php // Generates a random bank account number echo $faker->bankAccountNumber; // "MD83BQW1CKMUW34HBESDP3A8"
Faker\Provider\ro_RO\Payment
<?php // Generates a random bank account number echo $faker->bankAccountNumber; // "RO55WRJE3OE8X3YQI7J26U1E"
Faker\Provider\ro_RO\Person
<?php // Generates a random male name prefix/title echo $faker->prefixMale; // "ing." // Generates a random female name prefix/title echo $faker->prefixFemale; // "d-na." // Generates a random male first name echo $faker->firstNameMale; // "Adrian" // Generates a random female first name echo $faker->firstNameFemale; // "Miruna" // Generates a random Personal Numerical Code (CNP) echo $faker->cnp; // "2800523081231" // Valid option values: // $gender: null (random), male, female // $dateOfBirth (1800+): null (random), Y-m-d, Y-m (random day), Y (random month and day) // i.e. '1981-06-16', '2015-03', '1900' // $county: 2 letter ISO 3166-2:RO county codes and B1, B2, B3, B4, B5, B6 for Bucharest's 6 sectors // $isResident true/false flag if the person resides in Romania echo $faker->cnp($gender = null, $dateOfBirth = null, $county = null, $isResident = true);
Faker\Provider\ro_RO\PhoneNumber
<?php // Generates a random toll-free phone number echo $faker->tollFreePhoneNumber; // "0800123456" // Generates a random premium-rate phone number echo $faker->premiumRatePhoneNumber; // "0900123456"
Faker\Provider\ru_RU\Payment
<?php // Generates a Russian bank name (based on list of real russian banks) echo $faker->bank; // "ОТП Банк" //Generate a Russian Tax Payment Number for Company echo $faker->inn; // 7813540735 //Generate a Russian Tax Code for Company echo $faker->kpp; // 781301001
Faker\Provider\sv_SE\Payment
<?php // Generates a random bank account number echo $faker->bankAccountNumber; // "SE5018548608468284909192"
Faker\Provider\sv_SE\Person
<?php //Generates a valid Swedish personal identity number (in Swedish - Personnummer) echo $faker->personalIdentityNumber() // '950910-0799' //Since the numbers are different for male and female persons, optionally you can specify gender. echo $faker->personalIdentityNumber('female') // '950910-0781'
Faker\Provider\zh_CN\Payment
<?php // 生成一个随机的银行名称(基于真实的中国银行的列表) echo $faker->bank; // '中国建设银行'
Faker\Provider\uk_UA\Payment
<?php // Generates an Ukraine bank name (based on list of real Ukraine banks) echo $faker->bank; // "Ощадбанк"
Faker\Provider\zh_TW\Person
<?php // Generates a random personal identify number echo $faker->personalIdentityNumber; // A223456789
Faker\Provider\zh_TW\Company
<?php // Generates a random VAT / Company Tax number echo $faker->VAT; //23456789
https://github.com/fzaninotto/Faker