nikserg / yii2-xml-model-behavior
此包最新版本(1.0.0)没有可用的许可证信息。
将模型序列化为XML的行为
1.0.0
2019-02-25 10:29 UTC
Requires
- spatie/array-to-xml: ^2.8.0
README
将模型序列化为XML的行为和特性
安装
composer require nikserg/yii2-xml-model-behavior
使用方法
核心功能是 $model->asXml()
,它返回表示对象的XML字符串。要成功使用它,$model
的类应满足以下条件
- 扩展
yii\base\Model
- 使用行为
nikserg\yii2\XmlModelBehavior\XmlModelBehavior
- 使用特性
nikserg\yii2\XmlModelBehavior\XmlArrayableTrait
- 重写
fields()
函数以使用下划线功能(请参阅示例说明部分)。
简单示例比长篇大论更好
use Document;
use nikserg\yii2\XmlModelBehavior\XmlArrayableTrait;
use nikserg\yii2\XmlModelBehavior\XmlModelBehavior;
use yii\base\Model;
class File extends Model
{
use XmlArrayableTrait;
public $idFile = null;
public $applicationVersion = null;
public $formVersion = null;
/**
*
* @property Document $document
*/
public $document = null;
public function behaviors()
{
$return = parent::behaviors();
$return[] = [
'class' => XmlModelBehavior::class,
'rootElement' => 'File',
];
return $return;
}
public function fields()
{
return [
'_idFile' => 'idFile',
'_applicationVersion' => 'applicationVersion',
'_formVersion' => 'formVersion',
'document' => 'document',
];
}
}
class Document extends Model
{
use XmlArrayableTrait;
public $documentId = null;
public function fields()
{
return [
'_id' => 'documentId',
];
}
}
调用 $file->asXml()
的结果
<File idFile="123" applicationVersion="CCWE_SEDSF_1.6" formVersion="1.02">
<document id="123"/>
</File>
解释示例
如您所见,行为仅添加到根模型中。特性应添加到根模型和子模型中。参数 rootElement
可以设置根XML元素名称。在 fields()
函数中,名称以下划线 _
开头的属性将被转换为元素的XML属性。其他属性将是子元素。
幕后
nikserg\yii2\XmlModelBehavior\XmlModelBehavior
提供了 $model->asXml()
函数。实际上,它只是 Spatie\ArrayToXml\ArrayToXml\ArrayToXml::convert
函数的一个包装,这并不很有趣。有趣的部分始于嵌套模型。为了支持下划线功能,您必须重写 toArray()
函数,这在行为中是不可能的。这正是特性发挥作用的地方。