今晚……不对,是昨晚。折腾了一个小项目,发现自动填充的中文数据不是很美观,于是开始思考如何填充中文数据进行测试。然而,经过一番查找,我惊讶地发现无论是官方还是一些非官方的文档都没有提到这个功能。期间,看到一篇别人“经验”的文章。这个需求虽然可以实现,但是需要修改vendor目录下fzaninotto/Faker包的源码。对于一个已经中了Laravel“优雅毒药”的人来说,怎么能忍受这样的风骚操作呢?一定有更好的方法……在继续梳理Laravel模型工厂的原理后,终于有了进步。事实证明,只需要一个小的修改就可以实现这个功能。根据官方例子的模型工厂代码$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,];});调整代码$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是默认使用的语言,即英语。调整后,Faker\Factory::create('zh_CN')也返回了一个Faker\Generator,不过初始化的是中文。事实上,Faker对中文的本地化支持还有部分需要改进的地方。不支持生成随机的中文句子或段落(对应的方法还是会返回英文),不过相信不久的将来会有大牛实现。功能。最后上图,实际数据生成效果如下:请不要担心省市隶属关系,数据仅供测试。Daniel在评论中提醒,Laravel5.4及更新的版本其实已经考虑了这个问题,设置了相关的配置项app.faker_locale,但是这个参数在文档和默认配置文件中是看不到的。相关源码在Illuminate\Database\DatabaseServiceProvider类中,可以查看源码判断是否支持该配置项。对于支持的版本,只需在config\app.php文件中添加faker_locale=>'zh_CN'
