mindtwo / laravel-dynamic-model-mutators
Laravel 动态模型修改器
Requires
- php: ^7.0|^8.0
- illuminate/database: ^7.4|^8.0|^9.0|^10.0
- illuminate/support: ^7.4|^8.0|^9.0|^10.0
Requires (Dev)
- orchestra/testbench: ~7.2
README
重要通知
以下文档适用于 1.x 版本的包
我们将尽快添加 2.x 版本的文档。抱歉。
介绍
此包是 Laravel Eloquent 模型的扩展。它允许您通过注册自己的回调函数来定义多个获取和设置修改器。这是向 Laravel 的 getAttribute() 和 setAttribute() 方法注入的一种简单方式,尤其是在单个模型的不同特质中。
安装
您可以通过 composer 安装此包
composer require mindtwo/laravel-dynamic-model-mutators
如何使用?
在 Eloquent 模型中使用 "DynamicModelMutator" 特质
<?php namespace App; use Illuminate\Database\Eloquent\Model; use mindtwo\LaravelDynamicModelMutators\DynamicModelMutator; class User extends Model { use DynamicModelMutator; }
在模型的 boot 方法中,您现在可以注册动态获取器和设置器函数,例如:
/** * The "booting" method of the model. * * @return void */ protected static function boot() { static::registerSetMutator('translations', 'setAttributeTranslation'); static::registerGetMutator('translations', 'getAttributeTranslation'); }
registerSetMutator 和 registerGetMutator 需要两个参数。第一个是修改器的名称,这是配置注册修改器属性的属性名称。第二个是要在同一对象上调用的回调函数的名称。
定义修改器属性
要为您的修改器定义属性,您必须设置一个类属性,其名称与修改器密钥相同。例如,我们使用 'translations' 作为修改器密钥,因此我们可以在模型上定义一个 $translations 属性来设置我们的属性。
namespace Examples; use Illuminate\Database\Eloquent\Model; use mindtwo\LaravelDynamicModelMutators\DynamicModelMutator; use mindtwo\LaravelDynamicModelMutators\Interfaces\DynamicModelMutatorInterface; class exampleModel extends Model implements DynamicModelMutatorInterface { use use DynamicModelMutator; $translations = [ 'attribute_1', 'attribute_2', 'attribute_3' ]; }
可选地,您可以设置基于属性的配置,该配置将传递给您的修改器方法。这样,您可以为您的属性添加额外的配置。
namespace Examples; use Illuminate\Database\Eloquent\Model; use mindtwo\LaravelDynamicModelMutators\DynamicModelMutator; use mindtwo\LaravelDynamicModelMutators\Interfaces\DynamicModelMutatorInterface; class exampleModel extends Model implements DynamicModelMutatorInterface { use use DynamicModelMutator; $translations = [ 'attribute_1' = 'string', 'attribute_2' = 'text', 'attribute_3' = [ 'type' => string, 'locales' => ['en', 'de'] ] ]; }
设置修改器回调函数
设置修改器的回调函数必须接受三个参数。第一个是属性名称,第二个是属性值,第三个是属性特定配置。因为它们将在特质内部自动调用,所以不需要返回任何值。
/** * Set attribute translation. * * @return void */ public function setAttributeTranslation($name, $value, $config=null) { // Set value $value for attribute $name }
获取修改器回调函数
获取修改器的回调函数必须接受两个参数。第一个是属性名称,第二个是属性特定配置。它应该为给定的属性名称返回属性值。注意,您不能为动态修改的属性使用 Laravel 的属性转换功能,但实现我们的自己的转换相当简单。
/** * Get attribute translation. * * @return void */ public function setAttributeTranslation($name, $config=null) { // Get value for attribute $name }
变更日志
有关最近更改的更多信息,请参阅 CHANGELOG
贡献
有关详细信息,请参阅 CONTRIBUTING
安全
如果您发现任何安全问题,请通过电子邮件 info@mindtwo.de 而不是使用问题跟踪器。
致谢
许可
MIT 许可证(MIT)。有关更多信息,请参阅 许可文件