agandra / amp
增强Laravel功能并创建跨项目可重用的基础代码
Requires
- php: >=5.4.0
- illuminate/support: 4.2.*
- webpatser/laravel-uuid: >= 1.0.0
This package is not auto-updated.
Last update: 2024-09-24 01:51:18 UTC
README
这是一个插件,帮助我组织项目并阻止我在每个项目中重新构建相同的核心元素。此项目的目的是扩展一些核心Laravel功能,并生成脚本来快速启动项目。
Composer安装
"require": {
"agandra/amp": "dev-master"
}
导入配置设置并运行迁移
php artisan config:publish agandra/amp
包含服务提供者
\Agandra\Amp\Providers\AmpServiceProvider
AMP哲学
此包主要用于大型包,其中标准Laravel结构不足以提供组织。项目将分为3个主要组件:模型、服务和存储库。每个组件都服务于独特的目的。
模型
这些是继承自 \Eloquent 的标准模型文件。每个模型的实例代表表中的一行。我们不在控制器中用这些模型文件来构建查询以获取结果。我们不在控制器文件中创建模型的实例,我们只应在服务和存储库中操作这些模型文件。
存储库
存储库用于从数据源收集数据。存储库可以用于组合多个模型并获得相关数据集。调用存储库来收集数据而不是仅使用 Model::get() 的想法是能够在不改变代码中的所有调用的情况下过滤数据集。
通常您通过调用查询方法:Repo->query($params) 从存储库中收集数据。在 params 中,您传递一个数组,其中包含要返回的数据集的属性。查询方法将返回一个数据库构建器实例。
存储库还有其他辅助方法,如 find 和 findOrFail。
例如,假设您正在开发一个项目模型,用户可以购买项目。在代码中,您有多个调用 $item->get() 来返回相关项目。现在假设您向项目表添加一个属性 'purchasable'。如果此字段设置为 true,则只有相关行才会返回。您不必在代码的每个地方都添加 $item->where('purchasable','=',true)->get(),您可以在查询方法中添加一行来更改每个存储库调用返回的内容。
这是一个非常基础的例子,实际应用会复杂得多。但有一个方法来收集数据集是非常方便的。
服务
服务是重复执行的操作以操作数据。服务可以包括向用户发送电子邮件、创建模型、编辑模型或删除等操作。通常服务与操作或数据操作相关。
AMP验证器
AMP验证器通过在模型中设置规则和 customMessages 数组来工作。然后我们通过 amp 验证器实例传递类和输入。AMP验证器的优点是可以使用多个上下文。规则不再是单维数组,现在是多维的,允许在不同情况下允许不同的规则集。
示例规则属性
$rules = [
'create'=>
['name'=>'required'],
'edit'=>
['price'=>'required','value'=>'numeric'],
'other_context'=>
['name'=>'required']
];
验证器将仅使用创建时指定的上下文。例如
$validator = \Amp::validator($input, new User);
$validator->addContext('create');
if($validator->fails())
throw new Exception;
您也可以向一个验证器添加多个上下文,它将合并规则集并对所有它们进行验证。
AMP模型
AMP模型具有自动保存功能,可轻松保存用户输入。它将自动使用 AMP 验证器并传递正确的上下文。
if($user->autoSave()) {
// Passes the save
} else {
// Save has failed
throw new Exception($user->messages());
}
如果自动保存失败,则会有验证错误,您可以通过调用模型的 messages 方法来获取这些错误。
AMP模型还提供了在保存前后以及验证时调用的钩子。您还可以在模型上设置autoHash属性,它在保存到数据库之前会对值进行哈希处理。保存操作也在数据库事务中完成,因此如果发生错误或者保存前后的钩子生成了错误,整个数据库将保持不变。
要使用AMP模型,请确保您的模型文件扩展自\Agandra\Amp\Base\AmpModel
AMP回复
API
AMP
主要的AMP类仅是一个辅助类,用于访问AMP项目提供的不同属性。例如,要访问一个仓库,只需调用
\Amp::repo('RepoName')->query();
要获取验证器的实例,只需调用
\Amp::validator($input, $class);
当然,这些元素在没有调用AMP的情况下也是可用的,但通过这个类使用起来更方便。