最後更新日期:2024 年 01 月 14 日
Table of Contents
fake() 與 faker
從 laravel 9 開始,官方的說明文件就用 fake() 全域函式來取代 $this->faker
,但是實務上 2 種方式都可以使用;只是使用 fake() 的好處是可以在 tinker 互動模式中直接執行,這讓我們可以不用透過 web server,就可以知道其執行的結果大致為何。
文字
Lorem Ipsum 類型的文字測試資料
// 1 個單字
fake()->word();
// 1 個句子,約 6 個單字
fake()->sentence();
// 1 段落,約 3 個句子
fake()->paragraph();
// 1 段文字,約 200 個字元
fake()->text();
// // 1 段文字,約 100 個字元
fake()->text(100);
配合地區語系的文字資料 (以正體中文為例)
語言設定選項
config/app.php
預設的語言是 en_US,可以改為正體中文 zh_TW
這個選項在建立測試用的中文名字、中文地址…等個人貢料時特別有用
'faker_locale' => 'zh_TW',
fake()->name(); // 中文人名
fake()->lastName(); // 中文 姓
fake()->firstName(); // 中文 名
fake()->address(); // 中文地址
fake()->realText(500); // 500 個字的中文文章段落
fake()->phoneNumber();
網路類型
fake()->email(); // 'neoma30@wisozk.com'
fake()->safeEmail(); // 'langworth.nyasia@example.com'
fake()->userName(); // 'savanah16'
fake()->password(); // 'E({8'@,6"'
fake()->domainName(); // 'oreilly.info'
fake()->url(); // 'https://russel.com/omnis-exercitationem-dolore-debitis-doloremque.html'
fake()->slug(); // 'dolor-fuga-doloribus-voluptas-est-a-fugiat-nulla'
fake()->ipv4(); // '6.245.190.94'
fake()->localIpv4(); // '192.168.3.175'
fake()->ipv6(); // '9938:ed5b:bccf:53f1:9f8c:2d3d:dd2e:d53f'
fake()->macAddress(); // '"8A:62:54:1E:99:57"
fake()->imageUrl(); // "https://via.placeholder.com/640x480.png/000011?text=quae"
數字
// 產生 0 - 9 之前的隨機整數
fake()->randomDigit();
// 產生 0 - 9999 之前的隨機整數
fake()->numberBetween(0, 999);
// 產生 0 - 10 之前的隨機 3 位浮點數
fake()->randomFloat(3, 0, 10);
陣列隨機元素
// 傳回 1 個隨機的元素
fake()->randomElement(["apple", "banana", "cherry"])
// 傳回 2 個隨機的元素
fake()->randomElements(["AA", "BB", "CC", "DD", "EE"], 2);
日期與時間
fake()->unixTime($max = 'now');
// 回傳 DateTime 物件
fake()->dateTime($max = 'now', $timezone = null);
fake()->dateTimeThisYear($max = 'now', $timezone = null);
fake()->dateTimeThisMonth($max = 'now', $timezone = null);
// 回傳字串
// 2003-09-04
fake()->date($format = 'Y-m-d', $max = 'now');
// 14:18:58
fake()->time($format = 'H:i:s', $max = 'now');
// 23
fake()->dayOfMonth($max = 'now');
// 05
fake()->month($max = 'now');
// 1998
fake()->year($max = 'now');
fake()->timezone();
// am /pm or 上午 / 下午 , 依語系設定而有所不同
fake()->amPm($max = 'now');
// Dec 或 十二月, 依語系設定而有所不同
fake()->monthName($max = 'now');
// 星期六 或 Sat, 依語系設定而有所不同
fake()->dayOfWeek($max = 'now');
特殊符號轉換成亂數
假設我們想要產生類似「citycode: TPE」這樣,前方的 citycode: 是不變的,後面是三個大寫英文字的資料,我們可以使用 lexify()
$data = "citycode: " .strtoupper(fake()->lexify("???"));
其他類似的方法還有 numerify(), asciify(), bothify()
lexify() 會取代 ?
,將其用 randomLetter() 的結果取代
numerify() 會取代 #
和 %
,將 # 改變為 randomDigit(),將 % 改變為 randomDigitNot() 的結果
asciify() 會取代 *
,將其改變為 randomAscii() 的結果
bothify() 會處理全部的 wildcard 符號
產生影像
// 產生一個 300 x 300 的 png 圖像,並傳回蹃徑
// /var/www/album-web/storage/app/d576765aad9f414048936d8f2159d359.png
$image_path = fake()->image(storage_path("app"), 300, 300);
image() 的完整用法
function image(
?string $dir = null, // 目錄
int $width = 640, // 圖片寬度
int $height = 480, // 圖片高度
?string $category = null, // 加在圖片中的第一個文字
bool $fullPath = true, // 是否回傳完整路徑
bool $randomize = true, // 是否在圖片中加入隨機文字
?string $word = null, // 加在圖片中的第二個文字
bool $gray = false, // 圖片是否為灰階
string $format = 'png' // 產生圖片的類型
)
// category 和 word 不能為中文
參考資料
fzaninotto / Faker ( Deprecated)
Comments