使用对象创建文件夹结构

时间:2014-03-14 08:44:57

标签: php xml moodle platform

我有一个包含导出的OLAT备份数据的对象(OLAT是一个用Java编写的电子学习工具)。

现在我需要制作另一种'类型'备份文件,即Moodle备份文件,所以我可以将其导入Moodle本身(另一个用PHP编写的电子学习工具)。所以我的计划是创建Moodle备份所需的文件夹结构,并将数据写入相应的.xmls和路径。

我知道这听起来很模糊,但我的问题是:创建这些文件的最佳做法是什么?例如,我需要使用这种结构制作一个.xml:

<?xml version="1.0" encoding="UTF-8"?>
<course id="8" contextid="78">
  <shortname>Test Course Short</shortname>
  <fullname>Test Course Long</fullname>
  <idnumber></idnumber>
  <summary></summary>
  <summaryformat>1</summaryformat>
  <format>topics</format>
  <showgrades>1</showgrades>
  <newsitems>5</newsitems>
  <startdate>1394668800</startdate>
  <marker>0</marker>
  <maxbytes>0</maxbytes>
  <legacyfiles>0</legacyfiles>
  <showreports>0</showreports>
  <visible>1</visible>
  <groupmode>0</groupmode>
  <groupmodeforce>0</groupmodeforce>
  <defaultgroupingid>0</defaultgroupingid>
  <lang></lang>
  <theme></theme>
  <timecreated>1394632991</timecreated>
  <timemodified>1394632991</timemodified>
  <requested>0</requested>
  <enablecompletion>0</enablecompletion>
  <completionnotify>0</completionnotify>
  <numsections>8</numsections>
  <hiddensections>0</hiddensections>
  <coursedisplay>0</coursedisplay>
  <category id="1">
    <name>Miscellaneous</name>
    <description>$@NULL@$</description>
  </category>
  <tags>
  </tags>
</course>

我知道这听起来像基本的PHP,但这也是它的本质。例如,我如何使用PHP创建此文件?

1 个答案:

答案 0 :(得分:0)

您可以将所需的Moodle文件定义为PHP类(具有公共属性)。

namespace Moodle\Models;
class Course {
  protected $id;
  protected $contextid;

  public $shortname;
  public $fullname;
  ...
}

使用OLAT内容填充Moodle对象,你可以写一点OLAT2Moodle转换器。 转换器将有几个函数处理OLAT对象和创建Moodle对象。 您可能希望使用factory design pattern

在工厂方法中,您可以使用简单数组来定义目标属性的源属性,并使用常规方法来确定对象。简单的例子。

function fillObject($sourceObject,$destinationObject,$conversationMap) {
  foreach (conversationMap as $destinationAttribute => $sourceAttribute) {
  {
    $destinationObject->$destinationAttribute = sourceObject->$sourceAttribute;
  }
}

$courseConversationMap = array(
  'id' => 'id',
  'title' => 'coursetitle',
  'desc' => 'description',
  'start' => 'startDate',
  ...
);

$OLAT_course_object = getOLAT_i_dont_know_how_you_do_that();
$moodleCourse = new Moodle\Course();

fillObject($OLAT_course_object ,$moodleCourse ,$courseConversationMap);

现在您只需定义conversationMaps并将该逻辑放在工厂方法中。 然后,您只需迭代给定的OLAT对象并调用工厂创建方法。 不要害怕 - 它不是火箭科学也不是脑外科; - )

然后使用一些PHP XML Library to convert said classes to XML并简单地将XML对象写入文件。

您的转换器可以高度重复使用,您可以轻松地在其基础上编写SomethingElse2Moodle转换器。