2015-06-10 49 views
6

我實施了一個新工廠來生成隨機數據。但我想要以de_DE的格式存在這個隨機數據。所以通常我會首先創建一個faker對象,但Laravel 5.1並沒有使用新的ModelFactory類。那麼我如何本地化呢?Laravel 5.1本地化播種機

$factory->define(App\Models\AED::class, function($faker) { 
    return [ 
     'owner' => $faker->company, 
     'street' => $faker->streetAddress, 
     'latitude' => $faker->latitude, 
     'longitude' => $faker->longitude 
    ]; 
}); 

回答

21

改變爲了改變由法克爾使用默認的語言環境,最簡單的方法是簡單地覆蓋FakerGenerator用自己的具體實現綁定:

// AppServiceProvider.php 
$this->app->singleton(FakerGenerator::class, function() { 
    return FakerFactory::create('nl_NL'); 
}); 

在您AppServiceProvider.php頂部文件中添加下列行:

use Faker\Generator as FakerGenerator; 
use Faker\Factory as FakerFactory; 

例如,上面的代碼將意味着被創建的所有法克爾實例使用nl_NL提供商,從而創建荷蘭騙子數據。

記住:這有的DatabaseServiceProvider執行後發生,所以一定要確保把你自己的AppServiceProviderconfig.php陣列所有Laravel ServiceProviders後。

+4

這應該是這個問題的正確答案。 Laravel有一個鬆散的組件,必須在創建之前定義它,以免失去創建垃圾對象的性能。只有一個筆記。包括路徑別名,例如'Faker \ Factory作爲FakerFactory'和'Faker \ Generator作爲FakerGenerator'以便本示例工作 –

4

嘗試

$factory->define(App\Models\AED::class, function($faker) { 
    $faker->locale = "YOUR_LOCALE"; 
    ... 
}); 
+1

這是另一種方式來中旬解決這個問題,你可能(也應該)需要在每個定義中包含這一行代碼。 @max解釋的服務提供者方法是更好的解決方案 –

+0

@alwinKesler的確。這是一個更好的解決方案。 – chanafdo

0

您必須添加提供商如。

$factory->define(Mylead\Models\UserDetails::class, function($faker) { 

    $faker->addProvider(new Faker\Provider\pl_PL\Person($faker)); 
    $faker->addProvider(new Faker\Provider\pl_PL\Payment($faker)); 

    return [ 
     'name' => $faker->name, 
     'surname' => $faker->lastname, 
     'street' => $faker->streetName, 
     'city' => $faker->city, 
     'post_code' => $faker->pesel, 
     'pesel' => $faker->pesel, 
     'paypal' => $faker->email, 
     'bank_name' => $faker->bank, 
     'bank_account' => $faker->bankAccountNumber, 
     'created_at' => $faker->dateTime 
    ]; 
}); 

現在,您不能設置manualy Faker語言環境。它應該在Laravel核心

+0

Laravel Core如何以及在哪裏更改? – animaacija

+1

這2個文件: '\照亮\數據庫\雄辯\廠:: raw' '\照亮\數據庫\雄辯\ FactoryBuilder :: __ construct' – Pyton

+1

所以,如果你有20個定義,是你的意思包括正他們中的每一個提供者?這不應該是繼續進行的方式。退房@max回答 –

1

無論是在你的ModelFactory.php的頂部或在您的AppServiceProvider添加這種:: register()方法:

$this->app->singleton(\Faker\Generator::class, function() { 
    return \Faker\Factory::create('de_DE'); 
}); 
+0

添加到ModelFactory不起作用,但AppServiceProvider :: register()工作。謝謝。 –