zain / laravel-doctrine-jetpack
Doctrine在Laravel中的实用生成器
Requires
- php: >=7.4
Requires (Dev)
- laravel-doctrine/fluent: ^1.0
- laravel-doctrine/orm: ^1.0
- orchestra/testbench: ^4.0
- phpunit/phpunit: ^8.0
- ramsey/uuid-doctrine: ^1.5
Suggests
- laravel-doctrine/fluent: ^1.0
- laravel-doctrine/orm: ^1.0
- ramsey/uuid-doctrine: ^1.5
This package is auto-updated.
Last update: 2024-09-24 01:47:54 UTC
README
一套提高生产力的辅助工具,使使用Laravel Doctrine更加简单快捷。
安装
此包严格需要 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