今晚……不對,是昨晚,折騰一個的小項目,發現自動填充的中文數據顯示起來總不太美觀,因而開始琢磨如何填充中文數據進行測試。php
然而一番搜索後驚奇的發現,官方、以及一些非官方的文檔均未說起這一功能。期間看到一篇他人的「經驗」文章,雖然能夠實現這一需求,卻要求修改 vendor 目錄下 fzaninotto/Faker 包的源碼,對於一箇中了 Laravel 的「優雅之毒」的人來講,怎能容忍如此風騷的操做?app
必定有更好的辦法……ide
繼續理清 Laravel 模型工廠原理以後,終於有所進展。發現其實只須要一個小小的修改就能夠實現這一功能。post
根據官方示例的模型工廠代碼測試
$factory->define(App\Product::class, function (Faker\Generator $faker) { return [ 'user_id' => 1, 'name' => $faker->name, 'mobile' => $faker->phoneNumber, 'province' => $faker->state, 'city' => $faker->city, 'area' => $faker->area, 'address' => $faker->streetAddress, 'postcode' => $faker->postcode, ]; });
調整後的代碼spa
$factory->define(App\Address::class, function () { $faker = Faker\Factory::create('zh_CN'); return [ 'user_id' => 1, 'name' => $faker->name, 'mobile' => $faker->phoneNumber, 'province' => $faker->state, 'city' => $faker->city, 'area' => $faker->area, 'address' => $faker->streetAddress, 'postcode' => $faker->postcode, ]; });
調整前,使用依賴注入的 Faker\Generator
是使用的默認語言,即英文。code
調整後, Faker\Factory::create('zh_CN')
也會返回一個 Faker\Generator
, 但它是使用漢語初始化的。ci
事實上 Faker 本地化對於中文的支持仍有部分待完善,使用暫時不支持生成隨機中文句子或者段落(相應的方法返回的仍然會是英文的),但我相信不久以後會有大牛實現這一些功能。 文檔
最後,上圖,實際生成數據效果以下:源碼
請別糾結省市區從屬關係,數據僅供測試而已
評論中大牛提醒後發現, Laravel5.4 及更新版本其實已經考慮了這一問題,並設置了相關的配置項 app.faker_locale
,只不過在文檔和默認的配置文件中看不到這一參數。相關源碼在 Illuminate\Database\DatabaseServiceProvider
類中,能夠查看源碼來判斷是否支持這一配置項。對於支持的版本,只須要在 config\app.php
文件中加入 faker_locale => 'zh_CN'
就能夠實現了