denis-vinokurov / annotation-hydrator-bitrix
Bitrix 的注解
1.10.1
2020-05-28 07:11 UTC
Requires
- php: ^7.1
- denis-vinokurov/annotation-hydrator: ^0.9
- zendframework/zend-code: ^3.3
- zendframework/zend-filter: ^2.8
Requires (Dev)
- phpunit/phpunit: ^7.0
- zendframework/zend-servicemanager: ^3.3
README
为了输出页面,需要在文件 /local/php_interface/init.php 中包含以下代码
- 在
/local/php_interface/init.php文件中,添加require_once $PATH_TO_PACKAGE . '/bitrix-files/menu.php' - 创建文件
/bitrix/admin/annotation-hydrator.php并包含以下代码require $PATH_TO_PACKAGE. '/bitrix-files/admin-section.php'; - 之后,页面将通过
服务->注解 hydrator路径访问
类型为 '引用元素' 的字段
存储库应实现接口 \Vinds\AnnotationHydrator\Repository\RepositoryInterface 并在 \Psr\Container\ContainerInterface 中按以下模板注册
- 信息块元素的存储库 -
iBlockElement#IBLOCK_ID# - 信息块分区的存储库 -
iBlockSection#IBLOCK_ID# - 高亮块元素的存储库 -
HighLoadBlock#HIGHLOAD_ID#
FileField
在从数据库选择文件之前,如果有集合上下文,则选择集合中所有文件的 id,然后获得 1 次查询。结果仅对表 b_file 执行 1 次查询。
在使用此类型字段之前,必须在 \Vinds\AnnotationHydrator\EntityManager 中设置 \Vinds\AnnotationHydratorBitrix\Annotations\FileField 的字段。 \Vinds\AnnotationHydrator\EntityManager 将用于选择其他包含文件的字段。
$entityManager = $locator->get(\Vinds\AnnotationHydrator\EntityManager::class);
\Vinds\AnnotationHydratorBitrix\Annotations\FileField::setEntityManager($entityManager);
IBlock
\Vinds\AnnotationHydratorBitrix\Annotations\IBlock\IBlockId
建议为所有属于信息块类的类指定
向选项中添加信息块 id 的值。可以应用于类
use Vinds\AnnotationHydrator\Annotations;
use Vinds\AnnotationHydratorBitrix\Annotations\IBlock;
/**
* @Annotations\Entity()
* @IBlock\IBlockId(3)
*/
class Entity {
/**
* @IBlock\Property()
* @IBlock\EnumField(name="SIZES_CLOTHES")
*
* @var \Vinds\AnnotationHydratorBitrix\Types\Enum\EnumItem
*/
protected $sizesClothes;
}
或
use Vinds\AnnotationHydrator\Annotations;
use Vinds\AnnotationHydratorBitrix\Annotations\IBlock;
define('IB_SKU', 3);
/**
* @Annotations\Entity()
* @IBlock\IBlockId(IB_SKU)
*/
class Entity {
/**
* @IBlock\Property()
* @IBlock\EnumField(name="SIZES_CLOTHES")
*
* @var \Vinds\AnnotationHydratorBitrix\Types\Enum\EnumItem
*/
protected $sizesClothes;
}
\Vinds\AnnotationHydratorBitrix\Annotations\IBlock\Property
在为包含来自信息块属性的数据的类属性指定此注解时,不需要指定前缀 PROPERTY_ 和后缀 _VALUE。例如
use Vinds\AnnotationHydrator\Annotations;
use Vinds\AnnotationHydratorBitrix\Annotations\IBlock;
/**
* @Annotations\Entity()
*/
class Entity {
/**
* @IBlock\Property()
* @IBlock\EnumField(name="SIZES_CLOTHES")
*
* @var \Vinds\AnnotationHydratorBitrix\Types\Enum\EnumItem
*/
protected $sizesClothes;
}
IBlock\EnumRepository
为信息块类型为列表的属性创建存储库
use \Vinds\AnnotationHydratorBitrix\Types;
use \Vinds\AnnotationHydratorBitrix\IBlock;
$enumItemFactory = new Types\Enum\EnumItemFactory();
$enumFactory = new Types\Enum\EnumFactory($enumItemFactory);
$cache = new \Vinds\AnnotationHydratorBitrix\BitrixCache('/enum-repository/');
$enumRepository = new IBlock\EnumRepository($enumFactory, $cache);
获取值列表
列表缓存通过 \Vinds\AnnotationHydratorBitrix\BitrixCache 在 /enum-repository/ 文件夹中。缓存存活 1 天,并标记为 iblock_id_${iBlockId} 标签。
$list = $emumRepository->get($iBlockId, $propertyCode);
HighloadBlock
\Vinds\AnnotationHydratorBitrix\Annotations\HighloadBlock\HLBlockId
建议为所有属于 HIGHLOAD_BLOCK 的类指定
向选项中添加信息块 id 的值。可以应用于类
use Vinds\AnnotationHydrator\Annotations;
use Vinds\AnnotationHydratorBitrix\Annotations\HighloadBlock;
/**
* @Annotations\Entity()
* @IBlock\HLBlockId(3)
*/
class Entity {
/**
* @\Vinds\AnnotationHydratorBitrix\Annotations\UserField\EnumField(name="SIZES_CLOTHES")
*
* @var \Vinds\AnnotationHydratorBitrix\Types\Enum\EnumItem
*/
protected $sizesClothes;
}
UserField
UserField\EnumRepository
为用户类型列表创建存储库
use \Vinds\AnnotationHydratorBitrix\Types;
use \Vinds\AnnotationHydratorBitrix\UserField;
$enumItemFactory = new Types\Enum\EnumItemFactory();
$enumFactory = new Types\Enum\EnumFactory($enumItemFactory);
$enumRepository = new UserField\EnumRepository($enumFactory);
获取值列表
$list = $enumRepository->get($entityId, $fieldName);