ac/model-traits

减少创建模型时的样板代码的特性。

0.2.0 2014-01-31 19:49 UTC

This package is not auto-updated.

Last update: 2024-09-24 03:44:00 UTC


README

Build Status

这是一个用于复用模型类中一些常用模式的简便库。每个特性定义在下面的部分。

安装

在您的 composer.json 文件中 require "ac/model-traits": "0.2.0" 并运行 composer update ac/model-traits

AutoGetterSetterTrait

这将使用一些反射魔法来允许您为任何属性使用getter/setter,而无需自己定义。当然,您仍然可以显式地覆盖任何属性的getter/setter,以便在其中添加或需要自定义逻辑。其中包含一些假设

  • publicprotected 属性均可设置和获取
  • private 属性仅可获取

示例

use AC\ModelTraits\AutoGetterSetterTrait;

class MyModel
{
    use AutoGetterSetterTrait;

    private $id;
    protected $name;
    protected $age;

    public function __construct($id = null)
    {
        $this->id = $id;
    }
}

$m = new MyModel(5);
$m->setName('John');
$m->setAge(23);

echo $m->getId();       //5
echo $m->getName();     //John
echo $m->getAge();      //23

AnnotatedGetterSetterTrait

如果您想更精确地指定哪些属性将创建getter/setter,可以使用基于注解的特性

use AC\ModelTraits\AnnotatedGetterSetterTrait;
use AC\ModelTraits\Annotation as MT;

class MyModel
{
    use AnnotatedGetterSetterTrait;

    /**
     * @MT\Getter
     */
    private $id

    /**
     * @MT\GetterAndSetter
     */
    private $name;

    /**
     * @MT\GetterAndSetter
     */
    protected $age;
}

属性可以具有任何访问级别(public、protected 或 private)和访问方法(getter 和/或 setter)的组合。

ArrayFactoryTrait

这添加了一个静态工厂方法,允许通过属性名到值的映射来创建模型的一个实例。它假设任何展示模型在其构造函数中不需要自定义参数。这将允许在创建期间设置私有属性。

示例

use AC\ModelTraits\GetterSetterTrait
use AC\ModelTraits\ArrayFactoryTrait;

class MyModel
{
    use ArrayFactoryTrait, GetterSetterTrait;

    private $id;
    protected $name;
    protected $description;
}

$m = MyModel::createFromArray([
    'id' => 5,
    'name' => 'John',
    'age' => 23
]);

echo $m->getId();       //5
echo $m->getName();     //John
echo $m->getAge();      //23