akandels / contain
Zend Framework 2 库,用于传递和处理丰富的数据实体。
dev-master
2015-06-18 13:43 UTC
Requires
- php: >=5.3.3
Requires (Dev)
- phpunit/phpunit: ~4.0
Suggests
- akandels/contain-mapper: dev-master
- symfony/yaml: >=2.1.0
- zendframework/zendframework: ~2.0
This package is not auto-updated.
Last update: 2024-09-14 13:28:29 UTC
README
编译轻量级PHP实体模型。无需ORM即可进行类型验证、数据封装、过滤和验证。
实体模型
实体模型是用来存储一个或多个描述应用程序中某个东西的数据的容器。例如,一个 用户 模型可能被描述为
$user = array(
'firstName' => 'Andrew',
'lastName' => 'Kandels',
);
假设你开发了一个创建用户的接口。有两种常见的方式将模型传递给该接口。
传递数组
class Service {
public function addUser(array $data) {
...
}
}
$service->addUser($user);
这种方法的缺点是 addUser 方法只能保证接收一个数据数组。它可能接收到一个空数组、包含数据错误的数组(firstName -> first_name)或者甚至对于第一个或最后一个名字索引的非字符串值。
占位符参数
class Service {
public function addUser($firstName, $lastName) {
...
}
}
$service->addUser('Andrew', 'Kandels');
这种方法的第一个问题是当你开始创建更大的模型时,每个参数的确切位置很难记住。PHP 也不支持像其他语言那样的命名参数。删除参数也可能破坏向后兼容性。
PHP 也不能对字符串这样的标量值进行类型检查,因此服务仍然负责验证 $firstName 是否是一个字符串,而不是一个对象或其他不可用的东西。
认识 Contain
Contain 通过创建轻量级实体模型来解决此问题,这些模型可以在服务之间、控制器、视图以及应用程序的任何其他地方传递
class Service {
public function addUser(User $user) {
...
}
}
$user = new User(array(
'firstName' => 'Andrew',
'lastName' => 'Kandels'
));
$service->addUser($user);
Contain 通过实体模型为你处理以下事情
- 它将属性封装到一个简单的对象中(无需isset()检查)
- 它创建简单的设置器和获取器
- 它验证属性的类型
- 字符串是字符串
- 数字是数字
- 它将属性转换为预期的类型
- "2014-01-01" -> new DateTime(strtotime('2014-01-01'))
在 http://www.contain-php.org 查看完整的 项目文档。