sonofwinter/binding-bundle

此Bundle提供了使用Symfony从数组到实体的绑定功能

安装次数: 2,839

依赖项: 0

建议者: 0

安全: 0

星标: 2

关注者: 1

分支: 0

公开问题: 0

类型:symfony-bundle

v0.11.1 2023-09-20 13:00 UTC

README

打开命令行,进入你的项目目录并执行

$ composer require sonofwinter/binding-bundle

使用方法

在实体中定义绑定属性

对于v0.3.0及以上版本

    /**
     * @var string
     * @Binding(key="firstname")
     */
    private $firstname;

    /**
     * @var string
     * @Binding(key="lastname", setter="setOtherName")
     */
    private $lastname;

    /**
     * @var integer
     * @Binding(key="age", type="integer")
     */
    private $age;

    /**
     * @var string
     * @Binding()
     */
    private $userEmail;

对于v0.2.0及以下版本

    /**
     * @var string
     * @Binding(name="firstname")
     */
    private $firstname;

    /**
     * @var string
     * @Binding(name="lastname", setter="setOtherName")
     */
    private $lastname;

    /**
     * @var integer
     * @Binding(name="age", type="integer")
     */
    private $age;

    /** 
     * @var string
     * @Binding(name="userEmail")
     */
    private $userEmail;

你必须定义key|name属性。它是数组值的键。

如果想要使用另一个setter,则使用setter属性。

如果想要进行类型检查,则使用type属性。如果类型不匹配,则抛出BinderTypeException。

使用Binder服务将数组绑定到实体

    public function __construct(BinderInterface $binder)
    {
        $this->binder = $binder;
    }

    function bind(BindableEntity $be, array $data): BindableEntity
    {
        // $data = ['lastname' => 'Doe', 'firstname' => 'John', 'age' => 20, 'userEmail' => 'some.email@mail.com'];
        $this->binder->bind($be, $data);
        return $be;
    }

新特性:v0.4版包含和排除

    public function bind(&$object, array $params = [], array $include = [], array $exclude = [])

$include是必需的键数组,位于$params中,如果缺少一个或多个键,则抛出异常

$exclude是忽略的键数组,如果键存在,则不抛出异常。

新特性:v0.5版最小和最大值

    /**
     * @var integer
     * @Binding(key="age", type="integer", min=0, max=100)
     */
    private $age;

min和max值检查值是否在两个属性定义的范围内。

如果不在此范围内,则抛出特定异常

适用于数字(int/float)、字符串(长度)和数组(计数)

新特性:v0.6版子绑定器

    /** 
     * @var Test
     * @Binding(type="App\Entity\Test")
     */
    private $test;

当类型设置为实体命名空间时,子实体可以进行绑定。

getter用于获取子实体。如果子实体为null,则尝试创建它(不使用参数),如果失败,则绑定器将跳过子实体。因此,如果构造函数需要参数,则必须在绑定器操作之前定义子实体。

数据示例

$data = [
    'lastname' => 'Doe', 
    'firstname' => 'John', 
    'age' => 20, 
    'userEmail' => 'some.email@mail.com',
    'test' => [
        'testProps1' => 'value',
        'testProps2' => 'value'
    ]
];

新特性:v0.7版可空

    /** 
     * @var Test
     * @Binding(nullable=true)
     */
    private $test;

可空属性定义是否可以将null值设置为实体属性。属性的默认值为false。

V0.7.1更新

更新Symfony最小版本 4.0 -> 4.1

V0.8.0更新

更新Symfony最小版本 4.1 -> 4.3 || 5.0

v0.9.0更新

添加属性并提高最低版本

  • Symfony最低版本 5.0
  • PHP最低版本 8.0

因此,现在您可以使用属性而不是注解。

    #[Binding(key: "lastname", setter: "setLastname", type: "string", min: 2, max: 255)]
    private string $lastname = '';

您必须添加此配置才能使用它

    sow_binding.binding_method: attribute

您还可以使用此配置覆盖Binder属性

    sow_binding.attribute_class_name: 'SOW\BindingBundle\Attribute\Binding'