最後更新日期:2024 年 01 月 14 日

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)

https://github.com/FakerPHP/Faker

Faker(3)-- Base 類別中的基本方法

Last modified: 2024-01-14

Author

Comments

Write a Reply or Comment

Your email address will not be published.