nikserg/yii2-xml-model-behavior

此包最新版本(1.0.0)没有可用的许可证信息。

将模型序列化为XML的行为

1.0.0 2019-02-25 10:29 UTC

This package is auto-updated.

Last update: 2024-09-29 05:21:37 UTC


README

将模型序列化为XML的行为和特性

安装

composer require nikserg/yii2-xml-model-behavior

使用方法

核心功能是 $model->asXml(),它返回表示对象的XML字符串。要成功使用它,$model 的类应满足以下条件

  1. 扩展 yii\base\Model
  2. 使用行为 nikserg\yii2\XmlModelBehavior\XmlModelBehavior
  3. 使用特性 nikserg\yii2\XmlModelBehavior\XmlArrayableTrait
  4. 重写 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() 函数,这在行为中是不可能的。这正是特性发挥作用的地方。