ollieread / laravel-toolkit
Requires
- php: ^7.2
- laravel/framework: ^5.5
README
- Laravel: 5.5
- PHP: 7.1+
- 作者: Ollie Read
- 作者主页: http://ollieread.com
此工具包旨在简化Laravel应用的日常开发。它包含了一些我在几乎所有项目中都会使用的基本功能和方法。
版本
版本 | PHP | Laravel |
---|---|---|
v1 | >= 5.6.4 | 5.3 |
v2 | >= 5.6.4 | 5.4 |
< v3.2 | >= 7.1 | 5.4 |
=> v3.2 | >= 7.1 | 5.5+ |
安装
此包可在 Packagist 上找到,您可以使用Composer进行安装。
composer require ollieread/laravel-toolkit
使用
此工具包提供四种功能。
Eloquent
此工具包提供两种不同的作用域,打包在一起。请注意,这些只能提供辅助功能,您需要自己处理数据库模式。
启用
如果您有一个具有启用/活动状态的模型,您可以通过以下合同和特性添加此功能。
Ollieread\Toolkit\Eloquent\Enabled\EnabledContract
Ollieread\Toolkit\Eloquent\Enabled\EnabledTrait
将这些添加到您的模型中,将自动添加以下作用域。
Ollieread\Toolkit\Eloquent\Enabled\EnabledScope
您的启用状态列必须是一个布尔型/整数字段。如果它不是名为 enabled
,您可以覆盖特性提供的属性。
protected $enabled = 'enabled';
一旦添加了所有这些,查询此模型将默认只返回启用条目。要返回所有条目,请使用以下方法,类似于软删除。
withDisabled()
如果只想返回禁用条目,请使用以下方法。
disabled()
排序
如果您有一个可排序的模型,您可以通过将以下特性和合同添加到您的模型中添加此功能。
Ollieread\Toolkit\Eloquent\Order\OrderContract
Ollieread\Toolkit\Eloquent\Order\OrderTrait
这将添加以下全局作用域。
Ollieread\Toolkit\Eloquent\Order\OrderScope
您的查询现在将按排序字段排序,该字段的名称由覆盖特性提供的属性指定。此列必须是一个整数。
protected $order = 'order';
您可以使用以下直观的宏更改给定模型的顺序。
moveUp()
moveDown()
moveToTop()
moveToBottom()
向上、向下、移至顶部或底部移动行将更正其他所有行的顺序值。列值将是数字,顶部为0。
基本验证器
基本验证器与表单请求有一步之遥。这主要是因为我不喜欢让HTTP层验证数据,这不是它的职责。
要创建验证器,扩展以下类;
Ollieread\Toolkit\Validators\BaseValidator
然后您使用以下方法定义规则;
public function getRules(): array {
return [];
}
您也可以选择覆盖以下方法,以提供自定义消息;
public function getMessages(): array {
return [];
}
要验证您的数据,您可以这样做;
$myValidator = MyValidator::validate($arrayOfData[, $model])
第二个参数允许您传入一个模型(在验证更新表单时很有用)。此模型在 getRules()
和 getMessages()
方法中作为 $this->model
可用。
如果验证失败,则会自动抛出 Laravel 验证异常。
要返回底层验证器的实例,您可以执行以下操作;
$myValidator->validator();
基础仓库
基础仓库是一个抽象类,我让所有的仓库都继承自这个类。默认情况下,这个仓库设计用来与 Eloquent 一起工作。
要创建一个仓库,扩展以下类;
Ollieread\Toolkit\Repositories\BaseRepository
要为您的仓库设置模型,添加以下属性;
property $model = MyModel::class;
制作(受保护)
要获取您模型的新的实例,调用以下代码;
$this->make()
查询(受保护)
要在您模型的新的实例上获取新的查询,调用以下代码;
$this->query()
此方法主要存在作为辅助方法(调用 $this->make()->newQuery()
),这样我的 IDE 就不会对我抱怨。
获取 ID(受保护)
要从变量中检索 ID,该变量是 ID 或模型实例,调用以下代码;
$this->getId($id)
删除
这是一个基础删除方法,如果传入 ID 则使用查询,如果传入模型则调用辅助方法。要访问它,请调用以下代码;
$repository->delete($model)
按条件获取一个
这是一个通过键 => 值或键 => 值数组检索单行的方法,要使用它,请调用以下代码;
$repository->getOneBy($key, $value)
$repository->getOneBy([$key1 => $value1, $key2 => $value2])
此方法作为魔术方法提供,因此您可以执行以下操作;
$repository->getOneById($value)
通过条件获取
此方法与上面的方法相同,但它将返回所有匹配的结果,而不仅仅是其中一个。要使用它,请调用以下代码;
$repository->getBy($key, $value)
$repository->getBy([$key1 => $value1, $key2 => $value2])
此方法作为魔术方法提供,因此您可以执行以下操作;
$repository->getByDate($value)
事务(静态)
要开始一个事务,调用以下代码;
MyRepository::transaction(function () {
$this->somethingSomething();
return true;
});
此方法的行为与 DB::transaction()
完全相同。
提示
为了简单起见,我喜欢将方法定义添加到仓库的类级别 phpdoc 块中,如下所示;
/**
* Class MyRepository
*
* @method MyModel make()
* @method null|MyModel getOneById(int $id)
*
* @package My\Repositories
*/
用户模型
要获取密码设置修饰符(自动散列)和辅助方法 isPassword($password)
来比较密码,您的用户模型需要扩展以下类;
Ollieread\Toolkit\Models\User
此模型扩展了默认的认证用户,因此您仍然保留该功能。