pelmered/fake-car

Fake-Car 是一个 Faker 提供者,为您生成虚假的汽车数据。

资助包维护!
pelmered
Ko Fi

安装: 860 307

依赖关系: 3

建议者: 0

安全: 0

星标: 115

关注者: 5

分支: 22

开放问题: 2

2.0.1 2024-02-03 00:33 UTC

README

虚假汽车数据的 Faker 提供者

Latest Stable Version Latest Unstable Version Total Downloads Monthly Downloads License

Build Status Scrutinizer Code Quality Code Coverage

安装

要作为开发依赖项安装,请运行

composer require pelmered/fake-car --dev

如果您需要在生产中使用,请移除 --dev 标志。

从 1.x 升级到 2.x

破坏性更改

  1. 现在需要 PHP 8.1+(之前为 7.3+)
  2. 提供者名称已从 Fakecar 更改为 FakeCar。如果您在大小写敏感的文件系统中,这将导致问题,但强烈建议即使不在大小写敏感的文件系统中也进行更改。
  3. FakeCar 提供者类上的 transliteratecheckDigit 方法现在不再公开(可见性更改为私有)。
  4. FakeCar 提供者类上的公共方法 getRandomElementsFromArraygetWeighted 已移动到辅助类。可以通过以下方式访问它们:\Faker\Provider\FakeCarHelper::getWeighted
  5. 常量 EBCDICMODELYEAR 已不再公开。

3、4 和 5 是对公共 API 的未记录功能的更改,因此不应影响此包的典型使用场景。

基本用法

$faker = (new \Faker\Factory())::create();
$faker->addProvider(new \Faker\Provider\FakeCar($faker));


// generate matching automobile brand and model of car as a string
echo $faker->vehicle; // Volvo 740

// generate matching automobile brand and model of car as an array
echo $faker->vehicleArray; // [ 'brand' => 'Hummer', 'model' => 'H1' ]

// generate only automobile brand
echo $faker->vehicleBrand; // Ford

// generate automobile manufacturer and model of car
echo $faker->vehicleModel; // 488 Spider

// generate Vehicle Identification Number(VIN) - https://en.wikipedia.org/wiki/Vehicle_identification_number
echo $faker->vin; // d0vcddxpXAcz1utgz

// generate automobile registration number
echo $faker->vehicleRegistration; // ABC-123

// generate automobile registration number with custom format
echo $faker->vehicleRegistration('[A-Z]{2}-[0-9]{5}'); // AB-12345

// generate automobile model type
echo $faker->vehicleType; // hatchback

// generate automobile fuel type
echo $faker->vehicleFuelType; // diesel

// generate automobile door count
echo $faker->vehicleDoorCount; // 4

// generate automobile seat count
echo $faker->vehicleSeatCount; // 5

// generate automobile properties
echo $faker->vehicleProperties; // ['Towbar','Aircondition','GPS', 'Leather seats']

// generate automobile gear type (manual or automatic)
echo $faker->vehicleGearBoxType; // manual

// generate automobile engine power
echo $faker->vehicleEnginePower; // 250 hp

// generate automobile engine torque
echo $faker->vehicleEngineTorque; // 300 nm

Laravel 工厂示例

<?php
namespace Database\Factories;

use App\Models\Vehicle;
use Faker\Provider\FakeCar;
use Illuminate\Database\Eloquent\Factories\Factory;

class VehicleFactory extends Factory
{
    /**
     * The name of the factory's corresponding model.
     *
     * @var string
     */
    protected $model = Vehicle::class;

    /**
     * Define the model's default state.
     *
     * @return array
     */
    public function definition()
    {
        $this->faker->addProvider(new FakeCar($this->faker));
        $vehicle = $this->faker->vehicleArray();

        return [
            'vehicle_type'    => 'car',
            'vin'             => $this->faker->vin,
            'registration_no' => $this->faker->vehicleRegistration,
            'chassis_type'    => str_replace(' ', '_', $this->faker->vehicleType),
            'fuel'            => $this->faker->vehicleFuelType,
            'brand'           => $vehicle['brand'],
            'model'           => $vehicle['model'],
            'year'            => $this->faker->biasedNumberBetween(1990, date('Y'), 'sqrt'),
        ];
    }
}

提供自己的数据

要提供自己的数据或覆盖默认值,只需提供自己的数据提供者。

选项 1:提供自己的数据对象

首先,创建数据对象

<?php
class BMWFakeCarData extends \Faker\Provider\FakeCarData
{
    public static $brandsWithModels = [
        'BMW' => [
            '8 Series', 'M1', 'X5', 'Z1', 'Z3', 'Z4', 'Z8', 'Alpina', 'E', 'X3', 'M', 'X6', '1 Series', '5 Series',
            'X5 M', 'M5', '750', '6 Series', '3 Series', 'M3', 'X6 M', 'M6', 'X1', '7 Series', '325', '324', '316',
            '320', '318', '328', '523', '740', '520', '728', '525', 'Isetta', '530', '528', '545', '535', 'Dixi',
            '730', '745', '518', '524', '540', '116', '118', '120', '123', '125', '130', '135', '323', '330', '335',
            '550', '628', '630', '633', '635', '645', '650', '640', '760', '735', '732', '725', 'X series', 'X8',
            '340', 'RR', '1 Series М', '321', '315', '6 Series Gran Coupe', 'X2', '4 Series', '428', '435', '420',
            '2 Series', '3 Series GT', 'X4', '4 Series Gran Coupe', '326', 'I8', '5 Series GT', 'I3', 'M2', 'M4',
            'Neue Klasse', '1602', 'Active Hybrid 7', '2002', '2000', 'F10', 'X7', '128', '6 Series GT'
        ],
    ];

    public static $vehicleTypes = [
        'hatchback', 'sedan', 'convertible', 'SUV', 'coupe',
    ];

    public static $vehicleFuelTypes = [
        'gasoline' => 40,
        'electric' => 10,
        'diesel' => 20,
    ];
}

然后按如下方式将其添加到 Faker 中

$fakeCarDataProvider = new \Faker\Provider\FakeCarDataProvider(new BMWFakeCarData);

$faker = (new \Faker\Factory())::create();
$fakeCar = new \Faker\Provider\FakeCar($faker);
$fakeCar->setDataProvider($fakeCarDataProvider);
$faker->addProvider($fakeCar);

echo $faker->vehicleBrand; // BMW

选项 2:提供自己的数据提供者

<?php
namespace FakeCar\Tests\TestProviders;

use Faker\Provider\FakeCarDataProviderInterface;
use Faker\Provider\FakeCarHelper;

class FerrariEnzoTestProvider implements FakeCarDataProviderInterface
{

    public function getVehicleBrand(): string
    {
        return 'Ferrari';
    }

    public function getVehicleModel(): string
    {
        return 'Enzo';
    }

    public function getBrandsWithModels(): array
    {
        return [
            'brand' => $this->getVehicleBrand(),
            'model' => $this->getVehicleModel(),
        ];
    }

    public function getVehicleType(): string
    {
        return 'coupe';
    }

    public function getVehicleFuelType(): string|array
    {
        return 'gasoline';
    }

    public function getVehicleDoorCount(): int
    {
        return 2;
    }

    public function getVehicleSeatCount(): int
    {
        return 2;
    }

    public function getVehicleProperties(int $count = 0): array
    {
        return [
            'Air condition',
            'GPS',
            'Leather seats',
        ];
    }

    public function getVehicleGearBoxType(): string
    {
        return FakeCarHelper::getWeighted([
            'manual'    => 70,
            'automatic' => 30,
        ]);
    }

}

然后将其添加到 Faker 中

$fakeCarDataProvider = new FerrariEnzoTestProvider();

$faker = (new \Faker\Factory())::create();
$fakeCar = new \Faker\Provider\FakeCar($faker);
$fakeCar->setDataProvider($fakeCarDataProvider);
$faker->addProvider($fakeCar);

echo $faker->vehicleBrand; // Ferrari
echo $faker->vehicleModel; // Enzo

有关更多示例,请参阅 FakeCarDataProviderTest