sonofwinter / binding-bundle
此Bundle提供了使用Symfony从数组到实体的绑定功能
v0.11.1
2023-09-20 13:00 UTC
Requires
- php: >=8.1
- doctrine/annotations: ^2.0
- symfony/dependency-injection: ^6.0
- symfony/framework-bundle: ^6.0
- symfony/orm-pack: *
- symfony/yaml: ^6.0
Requires (Dev)
- phpunit/phpunit: ^9
- symfony/phpunit-bridge: ^6.0
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'