dcarbone/php-fhir

用于从HL7 FHIR规范创建PHP类的工具

资助包维护!
dcarbone
Ko Fi

v3.2.0 2024-08-30 22:23 UTC

README

用于从HL7 FHIR规范创建PHP类的工具

如果你打算使用由这个库生成的类,你可能需要使用php-fhir-generated仓库。

作为独立生成器安装

如果你想将此包作为独立生成器使用

  1. 检查所需的分支或标签
  2. 从项目目录的根目录执行composer install
  3. 执行./bin/generate.sh
  4. 回答所有提示
    • 如果没有定义自定义配置文件,定义将下载到./input,而类将在./output下生成
    • 你可以执行./bin/generate.sh --help以获取有关如何使用此脚本的信息
    • 你可以通过修改./bin/config.php中的值来配置此脚本的各种方面

此脚本将下载配置的FHIR主要版本到input文件夹,并在output文件夹中为每个版本生成类。

作为库安装

如果你想将生成器作为项目的一部分使用,你可以将其作为composer依赖项包含

composer require dcarbone/php-fhir

从那里,你可以参考示例块以了解如何配置和执行生成器。

版本表

基本用法

第一步是确定你的实现支持的FHIR规范版本。一旦完成,从http://hl7.org/fhir/directory.html下载适当的类定义XSD。

解压XSD并将其放置在PHP运行时用户可读的目录中。

接下来是乐趣所在

类生成

此库中包含的类生成器实用程序旨在将FHIR组提供的XSD解析成PHP类,包括标记和类型提示。

关于本节有两个重要事项需要注意

  1. 你的具体实现可能会不同,如果你需要帮助,请不要犹豫
  2. 类生成应针对每个FHIR版本运行一次。一旦生成了类,就只有在服务器切换到新的FHIR规范时才应重新生成

生成示例

你可以在此处查看示例配置数组:bin/config.php

// first, build new configuration class
$config = new \DCarbone\PHPFHIR\Config(require 'config.php');

// next, iterate through all configured versions and render code:
foreach ($config->getVersions() as $versionConfig) {
    $versionConfig->getDefinition()->getBuilder()->render();
}

数据查询

目前仅生成一个非常简单的客户端,用于调试目的。未来的目标是为客户端生成更全面的功能。

响应解析

在上述类生成过程中,将创建并添加到根命名空间目录中的响应解析类PHPFHIRResponseParser。它目前支持JSON和XML响应类型。

解析器类接受一个可选的布尔参数,该参数用于确定是否尝试加载生成的自动加载器类。默认情况下,它将这样做,但您可以根据自己的需求配置自己的自动加载器,而不必使用生成的自动加载器。

解析示例

require 'path to PHPFHIRResponseParserConfig.php';
require 'path to PHPFHIRResponseParser.php';

// build config
$config = new \YourConfiguredNamespace\PHPFHIRConfig([
    'registerAutoloader' => true, // use if you are not using Composer
    'libxmlOpts' => LIBXML_NONET | LIBXML_BIGLINES | LIBXML_PARSEHUGE | LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD | LIBXML_NOXMLDECL // choose different libxml arguments if you want, ymmv.
    'rootXmlns' => 'https://hl7.org/fhir', // a specific root xmlns to use, if the source does not return one
    'overrideSourceXmlns' => true, // set this to true if you want the 'rootXmlns' value you defined to override any value seen from source 
]);

// build parser
$parser = new \YourConfiguredNamespace\PHPFHIRResponseParser($config);

// provide input, receive output.
$object = $parser->parse($yourResponseData);

序列化

JSON序列化

$json = json_encode($object);

XML序列化

// To get an instance of \XMLWriter...
$xw = $object->xmlSerialize(null, $yourConfigInstance);

// to get as XML string...
$xml = $xw->outputMemory(true);

// you can alternatively have the output written directly to a file:
$xw = new \YourConfiguredNamespace\PHPFHIRXmlWriter();
$xw->openUri('file:///some/directory/fhir-resource.xml');
$object->xmlSerialize($xw, $yourConfigInstance);

XML序列化使用XMLWriter

测试

在根命名空间和输出目录下,作为类生成的一部分,创建了一个名为 PHPFHIRTests 的目录和命名空间。

待办事项

  • 实现基于事件或拉取的XML解析以处理大响应

建议和帮助

如果您对这个库如何使其更有用、更适用、更容易使用等有任何建议,请告诉我。