zain/laravel-doctrine-jetpack

Doctrine在Laravel中的实用生成器

v0.6 2020-02-13 02:42 UTC

This package is auto-updated.

Last update: 2024-09-24 01:47:54 UTC


README

一套提高生产力的辅助工具,使使用Laravel Doctrine更加简单快捷。

Build Status Latest Stable Version License Total Downloads

安装

此包严格需要 php >= 7.4

使用Composer安装包。

composer require szainmehdi/laravel-doctrine-jetpack

Laravel会自动发现此包。不需要额外步骤。

使用方法

生成器

此包包含一些生成器,可以帮助您在Laravel Doctrine中编写实体和映射类时提高工作效率。

实体生成器

通过运行以下artisan命令,使用包含的模板生成一个新的Doctrine实体:

php artisan make:entity MyEntity

默认情况下,这将在app/Entities中创建一个名为MyEntity.php的新文件,如下所示:

<?php declare(strict_types=1);

namespace App\Entities;

use Illuminate\Contracts\Support\{Arrayable, Jsonable};
use JsonSerializable;
use Ramsey\Uuid\{Uuid, UuidInterface};
use Zain\LaravelDoctrine\Jetpack\Serializer\SerializesAttributes;

class MyEntity implements Arrayable, Jsonable, JsonSerializable
{
    use SerializesAttributes;

    protected UuidInterface $id;

    public function __construct()
    {
        $this->id = Uuid::uuid1();
    }

    public function getId(): string
    {
        return $this->id->toString();
    }
}

流畅映射生成器

此包包含一个生成器,用于Laravel Doctrine的流畅映射驱动程序,这是一种非常Laravel-like的编写Doctrine映射的方法。

包含的命令接受一个目标实体作为参数,并生成一个映射文件。

php artisan make:mapping MyEntity

默认情况下,这将在app/Database/Doctrine/Mappings/中创建一个名为MyEntityMapping.php的新文件,如下所示:

<?php declare(strict_types=1);

namespace App\Database\Doctrine\Mappings;

use App\Entities\MyEntity;
use LaravelDoctrine\Fluent\EntityMapping;
use LaravelDoctrine\Fluent\Fluent;

class MyEntityMapping extends EntityMapping
{
    public function mapFor()
    {
        return MyEntity::class;
    }

    public function map(Fluent $map)
    {
        $map->uuidPrimaryKey();
        // ...
        $map->timestamps();
    }
}

为值对象(嵌入式)生成流畅映射类。

php artisan make:mapping MyValue --value

默认情况下,这将在app/Database/Doctrine/Mappings/Values/中创建一个名为MyValueMapping.php的新文件。

FlushEntityManager中间件

使用包含的中间件简化将实体实际持久化到数据库的过程。

将中间件添加到您的app/Http/Kernel.php文件中,如下所示:

class Kernel extends HttpKernel
{
    // ...

    protected $middleware = [
        // ...
        \Zain\LaravelDoctrine\Jetpack\Middleware\FlushEntityManager::class,
    ];
}

辅助工具

实体序列化

此包还包含一个辅助特质,允许您通过单行代码使实体(以及可能的其他任何类)可序列化为JSON或数组。

use Illuminate\Contracts\Support\Arrayable;
use Illuminate\Contracts\Support\Jsonable;
use JsonSerializable;
use Zain\LaravelDoctrine\Jetpack\Serializer\SerializesAttributes;

class MyEntity implements Arrayable, Jsonable, JsonSerializable
{
    // Add this trait to your entities
    use SerializesAttributes;
}

注意:为了获得最佳的Laravel体验,我建议您的实体类实现示例中提到的三个标准接口。这不是必需的,但它将允许您简单地return模型从控制器,或在tinker中检查它。(我不推荐这样做,但它确实在紧急情况下非常有用。)

自定义和配置

此包允许您轻松自定义生成器的几乎所有方面。通过发布配置文件开始。

php artisan vendor:publish --tag jetpack-config

这将在您的配置目录中创建一个名为jetpack.php的文件。编辑此文件以更改实体、值对象和映射类的默认命名空间。

对于高级自定义,此包允许您根据您的需要自定义内置的模板文件。

首先,请确保您已经在上面的步骤中发布了配置文件。接下来,使用以下命令发布模板。

php artisan vendor:publish --tag jetpack-stubs

这将在resources/jetpack/stubs中写入模板文件。请随意编辑文件,但请保留占位符名称。

最后,更新config/jetpack.php

return [
    'generators' => [
        'stubs_directory' => resource_path('jetpack/stubs/'),
        // ...
    ],
    // ...
];

开发

所有贡献都受到欢迎。发现了一个错误?在GitHub上打开一个问题,或者更好的是,提交一个Pull Request。

运行测试

在本地检查项目,并运行

composer install

composer test

# or, using docker
docker-compose run --rm php composer test