mindtwo/laravel-dynamic-model-mutators

Laravel 动态模型修改器

3.4 2023-08-08 14:38 UTC

This package is auto-updated.

Last update: 2024-09-08 17:15:19 UTC


README

Build Status StyleCI Quality Score Latest Stable Version Total Downloads MIT Software License

重要通知

以下文档适用于 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)。有关更多信息,请参阅 许可文件