[英]TYPO3 - Doctrine / DBAL data field type for BINARY(16) encoded IPv6 addresses
我正在為 TYPO3 插件實現 ORM model,該插件是現有外部數據庫的連接器。 我自己完成了大部分事情,但我不知道如何從給定的字節中解析 IPv6 地址:
namespace Homeinfo\hwdb\Domain\Model;
use DateTime;
final class System
{
function __construct(
public readonly int $id,
public readonly ?int $group,
public readonly ?int $deployment,
public readonly ?int $dataset,
public readonly ?int $openvpn,
public readonly WHAT_TYPE_HERE $ipv6address,
public readonly ?string $pubkey,
public readonly DateTime $created,
public readonly ?DateTime $configured,
public readonly bool $fitted,
public readonly string $operating_system,
public readonly ?bool $monitor,
public readonly ?string $serial_number,
public readonly ?string $model,
public readonly ?DateTime $last_sync,
public readonly bool $updating,
)
{
}
public static function fromArray(array $array): Self
{
return new self(
$array['id'],
$array['group'],
$array['deployment'],
$array['dataset'],
$array['openvpn'],
HOW_TO_PARSE_THIS($array['ipv6address']),
$array['pubkey'],
new DateTime($array['created']),
(($configured = $array['configured']) === null) ? null : new DateTime($configured),
$array['fitted'],
$array['operating_system'],
$array['monitor'],
$array['serial_number'],
$array['model'],
(($last_sync = $array['last_sync']) === null) ? null : new DateTime($last_sync),
$array['updating'],
);
}
}
我需要知道在 TYPO3 中可以使用什么類型來表示 IPv6 地址(我知道我在 Python 3 中用ipaddress.IPv6Address
來做)而且我也不知道如何從從 MySQL 檢索到的二進制數據中正確解析它IPv6 地址存儲為BINARY(16)
的數據庫。
由於 PHP 沒有“二進制”數據類型,您需要將數據轉換為某種字符串表示形式。 通過在 mysql 中使用 hex(clumn) 在 select 中投射列來簡化它。
這會給你一個 hexstring。 (也許 doctrine 已經自動完成了)如果你想向人類顯示地址。 您可以使用 .net_ntop() 直接轉換十六進制字符串
如果您需要兩種表示形式,您可以將十六進制存儲在 model 中,然后在適當的 getters / setters 中進行轉換,例如getHumanReadableIpAdress()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.