2015-06-10 17 views
6

Tôi đã triển khai một nhà máy mới để tạo dữ liệu ngẫu nhiên. Nhưng tôi muốn có dữ liệu ngẫu nhiên này theo định dạng của de_DE. Vì vậy, thông thường tôi tạo ra một đối tượng faker đầu tiên, nhưng đây không phải là trường hợp trong Laravel 5.1 với lớp ModelFactory mới. Làm cách nào để tôi bản địa hóa nội dung này?Laravel 5.1 Bản địa hóa Nhà máy Seeder

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

Trả lời

21

Để thay đổi vị trí mặc định được sử dụng bởi Faker, cách dễ nhất là chỉ cần ghi đè lên FakerGenerator ràng buộc với thực hiện cụ thể của riêng bạn:

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

Ngày đầu AppServiceProvider.php của bạn tệp thêm các dòng sau:

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

Ví dụ, mã trên sẽ có nghĩa là tất cả các trường hợp Faker được tạo bằng cách sử dụng dữ liệu máy pha Hà Lan.

Hãy nhớ rằng: điều này đã xảy ra sau các DatabaseServiceProvider đã được thực hiện, do đó hãy chắc chắn để đặt của riêng AppServiceProvidersau tất cả các ServiceProviders Laravel trong config.php mảng của bạn.

+4

Điều này nên là câu trả lời đúng cho vấn đề này. Laravel có thành phần lỏng lẻo phải được xác định trước khi tạo để không mất hiệu suất tạo các đối tượng rác. Chỉ một ghi chú. bao gồm các bí danh đường dẫn như 'Faker \ Factory là FakerFactory' và' Faker \ Generator làm FakerGenerator' để ví dụ này hoạt động –

4

Hãy thử

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

Đây là một cách khác để trung khắc phục vấn đề như bạn có thể (hoặc phải) cần để bao gồm dòng mã này bên trong mọi định nghĩa. Cách tiếp cận của nhà cung cấp dịch vụ được giải thích bởi @max là một giải pháp tốt hơn –

+0

@alwinKesler Thật vậy. Đó là một giải pháp tốt hơn. – chanafdo

0

Bạn phải thêm nhà cung cấp ví dụ.

$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 
    ]; 
}); 

Hiện tại bạn không thể đặt ngôn ngữ thủ công Faker. Nó cần được thay đổi trên Laravel Lõi

+0

làm thế nào và ở đâu nên được thay đổi trên Laravel Core? – animaacija

+1

Những 2 file: '\ Illuminate \ Database \ hùng biện \ Factory :: raw' ' \ Illuminate \ Database \ hùng biện \ FactoryBuilder :: __ construct' – Pyton

+1

Vì vậy, nếu bạn có 20 định nghĩa, bạn có gợi ý để bao gồm N nhà cung cấp trong mỗi một trong số họ? Đây không phải là cách để tiến hành. Kiểm tra câu trả lời @max –

1

Thêm này hoặc ở đầu ModelFactory.php của bạn hoặc trong AppServiceProvider bạn :: đăng ký() phương pháp:

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

Thêm vào ModelFactory không hoạt động nhưng AppServiceProvider :: register() đã hoạt động. Cảm ơn. –

Các vấn đề liên quan