venne / data-transfer
数据传输对象
dev-master / 1.0.x-dev
2014-11-15 08:52 UTC
Requires
- php: >=5.4.0
- nette/reflection: ~2.2.0@dev
- nette/utils: ~2.2.0@dev
- phing/phing: ~2.8.0
- squizlabs/php_codesniffer: ~1.5.0
Requires (Dev)
- kdyby/doctrine: ~2.1.0@dev
- nette/nette: ~2.2.0@dev
- nette/tester: ~1.2.0
- symfony/property-access: ~2.5.0@dev
This package is auto-updated.
Last update: 2024-08-29 04:09:00 UTC
README
在模板中使用 data transfer object
模式。
优点
- 模板中的简单只读对象。
- 可缓存的具有所有
Nette/Caching
功能的对象和集合。 - 可序列化的对象和集合。
- 与
Kdyby/Doctrine
无缝配合。
安装
安装 Venne/DataTransfer 的最佳方式是使用 Composer
composer require venne/data-transfer:@dev
激活
extensions: dataTransfer: Venne\DataTransfer\DI\DataTransferExtension
配置
dataTransfer: driver: Venne\Bridges\Kdyby\Doctrine\DataTransfer\EntityDriver cache: namespace: dataTransfer
用法
定义 DTO
/** * @property-read integer $id * @property-read string $name */ class ArticleDTO extends \Venne\DataTransfer\DataTransferObject {}
基本使用
$article = new ArticleDTO(array( 'id' => 1, 'name' => 'fooName', )); // Lazy mode $article = new ArticleDTO(function () { return array( 'id' => 1, 'name' => 'fooName', ); }); $article = unserialize(serialize($article)); // it works echo $article->id; // 1 echo $article->name; // fooName echo $article->foo; // throw exception
迭代器
$articles = DataTransferObjectIterator(ArticleDTO::class, array( array( 'id' => 1, 'name' => 'fooName', ), array( 'id' => 2, 'name' => 'barName', ), )); // Lazy mode $articles = DataTransferObjectIterator(ArticleDTO::class, function () { return array( array( 'id' => 1, 'name' => 'fooName', ), array( 'id' => 2, 'name' => 'barName', ), ); }); $articles = unserialize(serialize($articles)); // it works echo count($articles); foreach ($articles as $article) { echo $article->id; echo $article->name; }
数据传输管理器
$dataTransferManager = $container->getByType('Venne\DataTransfer\DataTransferManager'); // $dataTransferManager = new DataTransferManager($driver, $cacheStorage);
$article = $dataTransferManager ->createQuery(ArticleDTO::class, function () { return $this->articleRepository->find($this->id); }) ->enableCache($key, $dependencies) ->fetch();
$articles = $dataTransferManager ->createQuery(ArticleDTO::class, function () { return $this->articleRepository->findBy(array( 'parent' => $this->id, )); }) ->enableCache($key, $dependencies) ->fetchAll();
与 kdyby/doctrine
的协作
安装
extensions: ... kdybyDataTransfer: Venne\Bridges\Kdyby\Doctrine\DataTransfer\DI\DataTransferExtension
用法
$this->template->article = $dataTransferManager ->createQuery(ArticleDTO::class, function () { return $this->articleRepository->find($this->id); }) ->enableCache($key, $dependencies) ->fetch();