使用对象来创建文件夹结构


Using an object to make a folder structure

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

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

我知道这听起来很模糊,但我的问题是:创建这些文件的最佳行动方案是什么?例如,我需要用这个结构创建一个.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制作这个文件?

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

namespace Moodle'Models;
class Course {
  protected $id;
  protected $contextid;
  public $shortname;
  public $fullname;
  ...
}

要用OLAT内容填充Moodle对象,您可以编写一个小OLAT2Moodle转换器。转换器将具有几个处理OLAT对象和创建Moodle对象的函数。对此,您可能需要使用工厂设计模式。

在你的工厂方法中,你可以使用简单的数组为目标属性定义源属性,并使用通用方法来填充你的对象。简单的例子。

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库将所述类转换为XML,并简单地将XML对象写入文件。

你的转换器将是高度可重用的,你可以很容易地在它的基础上写SomethingElse2Moodle转换器