gerson / laravel-base
一个用于简化Laravel框架使用的工具包
Requires
- php: ^8.1
- spatie/laravel-query-builder: ^6.0.1
- yajra/laravel-datatables-oracle: ^11.1.0
Requires (Dev)
- laravel/pint: ^1.12
- dev-master
- 11.0.22
- 11.0.21
- 11.0.20
- 11.0.19
- 11.0.18
- 11.0.17
- 11.0.16
- 11.0.15
- 11.0.14
- 11.0.13
- 11.0.12
- 11.0.11
- 11.0.10
- 11.0.9
- 11.0.8
- 11.0.7
- 11.0.6
- 11.0.5
- 11.0.4
- 11.0.3
- 11.0.2
- 11.0.1
- v11.0.0.x-dev
- 11.0.0
- 5.0.0
- v4.x-dev
- 4.0.31
- 4.0.30
- 4.0.29
- 4.0.28
- 4.0.27
- 4.0.26
- 4.0.25
- 4.0.24
- 4.0.23
- 4.0.22
- 4.0.21
- 4.0.20
- 4.0.19
- 4.0.18
- 4.0.17
- 4.0.16
- 4.0.15
- 4.0.14
- 4.0.13
- 4.0.12
- 4.0.11
- 4.0.10
- 4.0.9
- 4.0.8
- 4.0.7
- 4.0.6
- 4.0.5
- 4.0.4
- 4.0.3
- 4.0.2
- 4.0.1
- 4.0.0
- v3.x-dev
- 3.0.20
- 3.0.19
- 3.0.18
- 3.0.17
- 3.0.16
- 3.0.15
- 3.0.14
- 3.0.13
- 3.0.12
- 3.0.11
- 3.0.10
- 3.0.9
- 3.0.8
- 3.0.7
- 3.0.6
- 3.0.5
- 3.0.4
- 3.0.3
- 3.0.2
- 3.0.1
- 3.0.0
- 2.0.17
- 2.0.16
- 2.0.15
- 2.0.14
- 2.0.13
- 2.0.12
- 2.0.11
- 2.0.10
- 2.0.9
- 2.0.8
- 2.0.7
- 2.0.6
- 2.0.5
- 2.0.4
- 2.0.3
- 2.0.2
- 2.0.1
- 2.0.0
- 1.1.0
- 1.0.10
- 1.0.9
- 1.0.8
- 1.0.7
- 1.0.6
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
This package is auto-updated.
Last update: 2024-09-11 14:04:14 UTC
README
简介
Laravel Base是一个旨在简化使用Laravel框架开发应用程序的包。它提供了一个应用程序开发的基础,为服务、仓库和控制器提供了开发结构,并为资源开发提供了基础。
需求
PHP ^8.1
如何安装
要安装此包,只需在项目的根目录中运行以下命令。
composer require gerson/laravel-base
让我们打开文件
config/app.php
并搜索
'providers' => [ ...
到数组末尾,只需添加
gersonalves\laravelBase\BaseLaravelServiceProvider::class
在您的项目中,在App内创建两个目录。 Services 和 Repositories
在app/Http/Controllers内的"Controller.php"文件中替换
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
为
use AuthorizesRequests, DispatchesJobs, ValidatesRequests, ControllerTrait;
并将其添加到文件标题中。
use gersonalves\laravelBase\Traits\ControllerTrait;
如何使用
使用它非常简单,您可以使用简单命令生成资源。唯一的要求是您已经生成了您的 模型。
只需运行以下命令
php artisan larabase:resource
并回答问题。
建议:在第一个问题(询问服务名称)中使用模型名称。如果您对所有项目都回答“是”,最终将有一个仓库
1 - 服务1 - 控制器。(已包含可执行CRUD)。
工作原理
get()方法将检索模型中的所有条目,您可以应用关系,只需在模型中创建一个名为scopeWithRelations的函数即可,参考以下示例
public function scopeWithRelations(Illuminate\Database\Eloquent\Builder $query) { return $query->with(['address', 'people']); }
这样,它将对INDEX和SHOW方法生效。
至于持久性(存储和更新),如果请求中来的索引与数据库中的列名相同,它将进行持久化。注意:您的Fillable需要包含这些列,这就是它从中提取的地方。此外,您可以在服务中覆盖store和update方法,从而应用其特定规则。
一些功能
在您的控制器中,您可以按以下方式配置验证
#1 - 控制器
protected ?array $validators = [ 'email' => 'required|unique:users,email', 'password' => 'required|min:8|string', 'cpf' => 'required|cpf|formato_cpf', ];
因此,任何存储或更新请求都将应用这些规则。但随后,我们遇到了一个问题。在指定电子邮件必须唯一时,更新会中断并指出电子邮件已存在,因为验证是在之前应用的,要解决这个问题,我们有两种选择,第一种是覆盖更新时的电子邮件规则,如下所示
protected ?array $replaceOnUpdate = [ 'email' => 'required' ];
这样,它将合并两个数组,在更新时电子邮件将继续被要求,但是没有唯一验证。此外,它将保持其他规则,对于cpf和密码,如果我想删除它们,可以这样做
protected ?array $excludeOnUpdate = ['cpf', 'password'];
这样,使用所有3个,结果将是,您将只在创建新记录时应用$validators,在更新时只需填写电子邮件。
#2 - 服务
在之前的版本中,我们需要这样做才能在多级别上保存东西
public function store(Request $request) { $eventAddress = new EventAddressRepository(); $address = $eventAddress->store(new Request($request->get('event_address'))); $request = $this->mergeRequest($request, ['id_event_address' => $address['id_event_address']]); $events = $this->repository->store($request); return array_merge($events, ['event_address' => $address]); }
在新版本中,我们不再需要这样做,请看以下示例
protected ?array $parentStore = [ EventAddressService::class => [ 'persist' => PersistEnum::BEFORE_PERSIST, 'callback' => 'NomeDaFuncaoDoCallBack' ] ]; public function NomeDaFuncaoCallBack($model){ }
我只需要告诉仓库它成为对象的“子”对象,并在何时应该持久化,是在主对象之前还是之后。
#3 - 仓库
如果需要存储图片,考虑到我会通过JSON请求以base64接收它,以下是一个示例
{
"logo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVQYV2NgYAAAAAMAAWgmWQ0AAAAASUVORK5CYII="
}
我可以在我的仓库中配置以下内容
protected ?array $storeFile = [ 'logo' => [ 'type' => fileEnum::BASE64_IMAGE, 'path' => 'public/' ] ];
这样,它将base64编码转换为文件,将其保存在预定义路径的存储中,并返回访问文件的URL。如果数据库中有一个名为"logo"的列,则将其添加到数据库中。
{
"logo": "localhost/storage/asdf-asdf-asdf-asdf.png"
}