sholokhov/bitrix-option

1.0.3 2024-08-29 16:53 UTC

This package is auto-updated.

Last update: 2024-09-29 16:58:14 UTC


README

安装

composer require sholokhov/bitrix-option

要求

  • PHP 8.2 及以上
  • Bitrix 12.0.7 及以上
  • 描述

    允许通过 DTO 与模块参数进行交互。

    与 b_option_site 表交互

    初始化和配置

    初始化参数管理器

    use Sholokhov\BitrixOption\Manager;
    
    $manager = new Manager($configuration);
    

    配置

    为了配置,需要指定以下值
  • 模块标识符 - 必需
  • 参数名称 - 必需
  • 网站标识符
  • 存储库(DTO) - 必需
  • 如果未指定或格式不正确的必需参数,则将引发异常

    $configuration = [
        'module' => 'my_module',
        'name' => 'connection',
        'siteID' => 's1',
        'storage' => $object
    ];
    

    存储库

    存储库必须实现 `` Sholokhov\BitrixOption\StorageInterface `` 接口。

    存储库结构示例

    use Sholokhov\BitrixOption\StorageInterface;
    
    class ConnectionDTO implements StorageInterface
    {
        public int $port;
        public string $host;
        public string $login;
        
        public function __toString(): string
        {
            return $this->toString();
        }
    
        public function toString(): string
        {
            return json_encode([
                'port' => $this->port,
                'host' => $this->host, 
                'login' => $this->login
            ]);
        }
    
        public static function fromString(string $value): self
        {
            $data = json_decode($value, JSON_OBJECT_AS_ARRAY);
    
            $connection = new self();
            $connection->port = intval($data['port'] ?? 22);
            $connection->host = (string)($data['host'] ?? '');
            $connection->login = (string)($data['login'] ?? '');
            
            return $connection;
        }
    }
    

    获取模块参数

    use Sholokhov\BitrixOption\Manager;
    
    $configuration = [
        'module' => 'sms.sender',
        'name' => 'connection',
        'siteID' => 's5',
        'storage' => ConnectionDTO::class
    ];
    
    $manager = new Manager($configuration);
    $connection = $manager->get();
    

    保存参数

    保存方法始终返回 Bitrix\Main\Result 对象。

    如果在保存过程中出现异常,则结果对象的 $result->isSuccess() 方法将返回假,并提供获取错误文本的机会。

    $result = $manager->save();
    
    if (!$result->isSuccess()) {
        your code ...
    }
    

    同步参数

    如果需要更新参数值,可以使用该方法
    $storage = $manager->load();
    

    注意

    如果存在未保存的值状态,则数据将丢失。加载的结果将是新对象 - 与旧资源(对象)的连接将被断开。

    $manager = new Manager($configuration);
    $storage = $manager->get();
    
    $storage->host = 'localhost';
    $manager->laod();
    
    // Сохранится пустое значение, т.к. связь с  $storage разорвана
    $manager->save();
    

    删除参数

    ```injectablephp $manager->remove(); ```

    基于对象初始化

    可以根据对象初始化配置管理器。对象必须描述 `` Sholokhov\BitrixOption\Attributes\Option `` 属性

    属性描述示例

    use Sholokhov\BitrixOption\Attributes\Option;
    
    #[Option(module: 'sms.sender', name: 'connection', storage: ConnectionDTO::class)]
    class Connection
    {
        ...
    }
    

    对象初始化

    use Sholokhov\BitrixOption\AttributeManager;
    
    // Способ 1
    $manager = new AttributeManager(Connection::class);
    $storage = $manager->get();
    
    // Способ 2
    $manager = new AttributeManager(new Connection(), 's1');
    $storage = $manager->get();
    

    配置收集器

    是简单对象初始化的包装。用于简化代码和抽象初始化对象的逻辑

    基于数组的配置器初始化

    use Sholokhov\BitrixOption\Manager;
    use Sholokhov\BitrixOption\Builder\Loader;
    
    $config = [
        'module' => 'sms.sender',
        'name' => 'connection',
        'siteID' => 's5',
        'storage' => ConnectionDTO::class
    ];
    
    $manager = new Manager($configuration);
    
    // Аналог
    $manager = Loader::load($config);
    

    基于对象初始化

    use Sholokhov\BitrixOption\AttributeManager;
    use Sholokhov\BitrixOption\Builder\Loader;
    
    $manager = new AttributeManager(Connection::class);
    
    // Аналог
    $manager = Loader::loadByEntity(Connection::class);