alexboo / phalcon-annotation-mapper
通过注解映射数据
dev-master
2018-01-26 03:58 UTC
Requires
- php: >=5.4.0
- ext-phalcon: >=1.2.4
This package is not auto-updated.
Last update: 2024-09-14 18:47:37 UTC
README
从对象或关联数组映射数据到实现 \Alexboo\AnnotationMapper\MapperInterface 的对象
安装
您可以使用 composer 安装它。但是它需要 phalcon 框架 php 扩展。
composer require alexboo/phalcon-annotation-mapper
示例
class Example extends \Alexboo\AnnotationMapper\Mapper
{
/**
* @Mapped(property="priceOut", type="float", precision=2)
*/
public $price;
/**
* @Mapped(type="integer")
*/
protected $count;
/**
* @Mapped(type="float[]")
*/
public $array;
/**
* @Mapped(type="Example2[]")
*/
public $object;
public function setCount($value) {
$this->count = $value;
}
}
class Example2 extends \Alexboo\AnnotationMapper\Mapper
{
/**
* @Mapped(type="integer")
*/
public $propertyOne;
/**
* @Mapped(type="float")
*/
public $propertyTwo;
/**
* @Mapped(type="string")
*/
public $propertyThree;
}
$donator = [
'priceOut' => '1000.51000',
'count' => 100,
'array' => ['1.222','2.333','3.400000'],
'object' => [[
'propertyOne' => '1000.500',
'propertyTwo' => '2000.500',
'propertyThree' => ' aaaddd '
]]
];
$example = new Example();
$example->mapping($donator);
var_dump($example);
$donator = new stdClass();
$donator->priceOut = '2000.52000';
$donator->count = 200;
$donator->array = [4,5,6];
$donator->object = [[
'propertyOne' => '1000.520',
'propertyTwo' => '2000.520',
'propertyThree' => ' aaaddd '
]];
$example = new Example();
$example->mapping($donator);
var_dump($example);
附加选项。
Caster float 和 string 支持附加选项。对于 float caster,您可以为小数点后的位数设置精度。对于字符串,您可以禁用或启用(默认使用)修剪所有字符串。
// Set default precision for all properties with float type
\Alexboo\AnnotationMapper\Cast\Float::setDefaultPrecision(1);
class Example3 extends \Alexboo\AnnotationMapper\Mapper
{
/**
* @var float $field1
* @Mapped(type="float")
*/
public $field1;
/**
* @var float $field2
* @Mapped(type="float")
*/
public $field2;
}
$example = new Example3();
$example->mapping([
'field1' => '15.123456',
'field2' => '987.654123',
]);
var_dump($example);
// Disabled/enabled trim string data
class Example4 extends \Alexboo\AnnotationMapper\Mapper
{
/**
* @Mapped(type="string")
*/
public $field1;
/**
* @Mapped(type="string")
*/
public $field2;
}
\Alexboo\AnnotationMapper\Cast\String::isTrim(false);
$example = new Example4();
$example->mapping([
'field1' => ' asdasd asdasdasd ',
'field2' => ' ',
]);
var_dump($example);
\Alexboo\AnnotationMapper\Cast\String::isTrim(true);
$example = new Example4();
$example->mapping([
'field1' => ' asdasd asdasdasd ',
'field2' => ' ',
]);
var_dump($example);
创建您的自定义类
如果您需要,可以创建自定义类。然后,您可以指定它作为属性的类型。Caster 必须实现 \Alexboo\AnnotationMapper\CastCastInterface
/**
* Cast all data to "blabla" string
* Class BlaBlaCaster
*/
class BlaBlaCaster extends \Alexboo\AnnotationMapper\Cast\CastAbstract
{
public function cast($value) {
return "blabla";
}
}
class Example5 extends \Alexboo\AnnotationMapper\Mapper
{
/**
* @Mapped(type="BlaBlaCaster")
*/
public $field1;
/**
* @Mapped(type="\Alexboo\AnnotationMapper\Cast\Integer")
*/
public $field2;
}
$example = new Example5();
$example->mapping([
'field1' => 'Say something very clever!',
'field2' => 123213213,
]);
var_dump($example);