php faker 库填充数据
Generating Fake Data in PHP with Faker
In the good old days, I often test PHP applications by accessing it directly from the browser and input the data in the forms. Today, with the explosion of awesome PHP libraries you can now generate most kinds of data by using code alone. The data can then be directly inserted into the database. This reduces the need to input data directly into the app. In this tutorial, I’ll be walking you through Faker , a PHP library that generates fake data for you.
Installation
You can install Faker by executing the following command. Note that this requires you to have Composer installed.
composer require fzaninotto/faker
Concepts
Here are a few concepts that you need to remember before moving on.
- generators – responsible for generating data.
- providers – the data source for generators. Generators can’t really stand by themselves. Providers really shine on the localization feature of Faker. Real places, phone numbers in countries can be generated by Faker through the use of providers.
- formatters – these are the properties that you can access from a specific generator. Examples include name, city, address, and phoneNumber.
Usage
To use Faker from your file, you need to include the vendor autoload file and create a new Faker instance.
<?php
require_once 'vendor/autoload.php';
$faker = Faker\Factory::create();
?>
Localization
Since Faker is an open-source project that anyone can contribute to, lots of localized providers has already been added. You can take advantage of this by passing in the locale when you create a new Faker instance. For example, if you live in the Philippines:
<?php
$faker = Faker\Factory::create('en_PH');
?>
You can then generate an address in the Philippines by using the address
formatter. Note that it’s only down to the city level. This means that the street and barangay are using the default providers.
<?php
echo $faker->address;
?>
Note that each provider doesn’t have generators for every possible formatter. For example, the Philippine provider has only generators for the Address and PhoneNumber. This means that you can only have localized values for those. All the other formatters will utilize the default ones provided by Faker. For a list of providers, check out this page in their Github repo.
Formatters
Here are the formatters that I commonly use in my projects.
<?php
//person
$faker->name;
$faker->firstName('male');
$faker->lastName;
//address
$faker->address;
$faker->streetName;
$faker->streetAddress;
$faker->postCode;
$faker->address;
$faker->country;
//company
$faker->company;
//date and time
$faker->year;
$faker->month; //number representation of a month
$faker->monthName;
$faker->timezone; //valid php timezone (http://php.net/manual/en/timezones.php)
$faker->time; //string time
$faker->dateTime; //datetime object
$faker->unixTime; //unix timestamp
//internet
$faker->email;
$faker->userName;
$faker->password;
//payment
$faker->creditCardType;
$faker->creditCardNumber;
//images
$faker->imageUrl(50, 60); //where width=50 and height=60
?>
Creating New Providers
If you want to create a provider for your own project, you can easily extend Faker. For example, if you want to generate random pokemon names. The first thing that you need to do is to declare the namespace in which the class belongs. Next, declare a new class and have it extend the faker provider base class. Inside the class, create an array of Pokemon names. Create a new function and call it pokemon
, this is the function that will be called later on to generate a random pokemon name. To pick a random item from the array you created, use the randomElement
function and then pass in the array which you want to use as the data source.
<?php
namespace Faker\Provider;
class Pokemon extends \Faker\Provider\Base {
protected static $pokemon = array(
'Pikachu',
'Bulbasaur',
'Cubone',
'Charizard',
'Marowak',
'Gastly',
'Alakazam',
'Arcanine',
'Vaporeon',
'Flareon',
'Venusaur',
'Wartortle'
);
public function pokemon(){
return static::randomElement(static::$pokemon);
}
}
?>
Save the file and name it Pokemon.php
. You can save it any where in your project as long as you can easily reference it from your main file.
On your main file, include the vendor autoload together with the file that you’ve just created.
<?php
require_once 'vendor/autoload.php';
require_once 'Pokemon.php';
?>
Create a new faker generator. This is a bare bones generator with no providers assigned to it. So if you use $faker->name
, all you get is an error.
<?php
$faker = new Faker\Generator();
?>
If you want to use the default providers, you can include them by calling the addProvider
method and passing in a new instance of the provider that you want to include.
<?php
$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));
?>
To add the new Pokemon provider.
<?php
$faker->addProvider(new Faker\Provider\Pokemon($faker));
?>
Once that’s done, you can now call the new pokemon
formatter.
<?php
$faker->pokemon; //marowak
?>
Integration with Your PHP Application
Most PHP frameworks today already comes with a database seeding feature. If you’re using Laravel, it has a database migration and seeding functionality . You can simply install Faker into your project, generate a new seeder and then use Faker inside the seeder. This allows you to seed your database with Fake data in a single command by using Artisan CLI . If your framework doesn’t include a seeding feature, you can use Phinx, a database-migration tool for PHP. This tool also allows you to create seeders for your database .
Conclusion
That’s it! In this tutorial, you’ve learned how to work with the Faker library to generate fake and random data for testing your PHP applications. Check out the official github page for more information regarding its usage.
php faker 库填充数据的更多相关文章
- Aspose.Cells 首次使用,用到模版填充数据,合并单元格,换行
Aspose.Cells 首次使用,用到模版填充数据,合并单元格,换行 模版格式,图格式是最简单的格式,但实际效果不是这种,实际效果图如图2 图2 ,注意看红色部分,一对一是正常的,但是有一对多的订单 ...
- Laravel使用Seeder自动填充数据
要查看代码,可以点击 或者转到链接:https://github.com/laravel/framework Laravel自动填充数据使用的是Seeder类 <?php use Illumin ...
- laravel框架一种方便的快速填充数据的方法
首先大家都知道在laravel框架里是采用seeder来填充数据的,具体命令如下,请将如下的类名称替换成你具体的seeder类名. 首先创建seeder类 php artisan make:seede ...
- Flask实战-留言板-使用Faker生成虚拟数据
使用Faker生成虚拟数据 创建虚拟数据是编写Web程序时的常见需求.在简单的场景下,我们可以手动创建一些虚拟数据,但更方便的选择是使用第三方库实现.流行的python虚拟数据生成工具有Mimesis ...
- 基于echarts 24种数据可视化展示,填充数据就可用,动手能力强的还可以DIY(演示地址+下载地址)
前言 我们先跟随百度百科了解一下什么是"数据可视化 [1]". 数据可视化,是关于数据视觉表现形式的科学技术研究. 其中,这种数据的视觉表现形式被定义为,一种以某种概要形式抽提出来 ...
- laravel7 数据迁移及填充数据
1:置迁移数据表,创建生成模型和迁移文件: php artisan make:model Article -m 2:接着,在框架中的database/migrations文件夹中找到刚创建的用户表Ar ...
- 使用SQLServer同义词和SQL邮件,解决发布订阅中订阅库丢失数据的问题
最近给客户做了基于SQLServer的发布订阅的“读写分离”功能,但是某些表数据很大,经常发生某几条数据丢失的问题,导致订阅无法继续进行.但是每次发现问题重新做一次发布订阅又非常消耗时间,所以还得根据 ...
- SQL Server 跨库同步数据
最近有个需求是要跨库进行数据同步,两个数据库分布在两台物理计算机上,自动定期同步可以通过SQL Server代理作业来实现,但是前提是需要编写一个存储过程来实现同步逻辑处理.这里的存储过程用的不是op ...
- dataguard从库移动数据文件
------------方法1从库移动数据文件路径方法1--------------将表空间offline的方法不行 1.退出日志应用alter database recover managed st ...
随机推荐
- [SQLSERVER] [RESTORE] 逐步恢复日志备份并使用只读模式查看
执行: USE master GO RESTORE DATABASE MYDB FROM DISK = N'FULL_BACKUP.bak' WITH REPLACE, STANDBY = N'STA ...
- 从零起步做到Linux运维经理,你必须管好的23个细节
不想成为将军的士兵,不是好士兵-拿破仑 如何成为运维经理?成为运维经理需要什么样的能力?我想很多运维工程师都会有这样的思考和问题. 如何成为运维经理.一般来说,运维经理大概有两种出身,一种是从底层最基 ...
- 关于QT的QCombox的掉坑出坑
最近项目中开发在用到QCombox,然而在开发中,踩到了一个坑,花了一个晚上,一直在想,好在最后找到问题所在了. 这是业务的流程.直接说重点:QCombox在下拉窗更新数据的时候,会默认把下拉窗的第一 ...
- time模块案例演示
案例01: 2008年8月8日20:08:08 往后88,888,888秒是哪天?星期几? 日期->时间戳(浮点数)->可以做数学运算 演示: import time # 构造日期的元组, ...
- Fix_And_Hold 使用及存在问题
RTKLIB中使用FIXANDHOLD没有对各个卫星的方差进行排序,仅仅是使用了截止高度角.而大软件中进行了排序后,使用30°的截止角作为hold条件. 1.总卫星数与hold卫星数,及ratio,全 ...
- 自带hyper -v 或者 Vmware安装Linux centos
centos系统存在网盘,链接: https://pan.baidu.com/s/1A5ywyLjIegcftaT_xCvPbA 密码: n6v4 https://blog.csdn.net/nanc ...
- BZOJ 1113 海报 单调栈
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1113 题目大意: N个矩形,排成一排. 现在希望用尽量少的矩形海报Cover住它们. ...
- Python2.7-math, cmath
math,cmath 模块,提供了用C标准定义的数学函数,简单说就是效率较高,cmath 不仅有 math 的功能,还增加了计算复数的函数.这两个模块返回的值基本上为 float 类型,除非明确指出返 ...
- Javascript跨浏览器的事件对象
一.跨浏览器的事件对象 var EventUtil = { ///添加事件 addHandler: function (element, type, handler) { if (element.ad ...
- C++之语言概述
C++语言是广泛使用的程序设计语言之一,因其特有的优势在计算机应用领域占有重要一席. C语言的发展 20世纪70年代初,贝尔实验室的Dennis Richie 等人在B语言基础上开发出C语言,最初是作 ...