Tin Can PHP库:处理查询

时间:2016-10-25 05:47:56

标签: php tin-can-api

我正在尝试使用Tin Can PHP库从LRS记​​录中提取actor代理的名称。我只有这个人的mbox值(电子邮件地址),所以我的检索尝试就像这样:

$actor = new TinCan\Agent();
$actor
    ->setMbox('mailto:bob@downe.com');

// return raw statement
$retrieve = $lrs->queryStatements(['agent' => $actor]);

如果我打印出$retrieve的值,我会得到以下原始语句(为简洁而截断):

TinCan\LRSResponse Object (
    [success] => 1
    [content] => TinCan\StatementsResult Object
        (
            [statements:protected] => Array
                (
                    [0] => TinCan\Statement Object
                        (
                            [id:protected] => 4c707377-384d-4547-a858-61696b386b6d
                            [stored:protected] => 2016-10-24T15:57:43.358Z
                            [authority:protected] => TinCan\Agent Object
                                (
                                    [objectType:protected] => Agent
                                    [name:protected] => Grant
                                    [mbox:protected] => 
                                    [mbox_sha1sum:protected] => 
                                    [openid:protected] => 
                                    [account:protected] => TinCan\AgentAccount Object
                                        (
                                            [name:protected] => ###
                                            [homePage:protected] => http://cloud.scorm.com/
                                        )

                                )

                            [version:protected] => 1.0.0
                            [attachments:protected] => Array
                                (
                                )

                            [actor:protected] => TinCan\Agent Object
                                (
                                    [objectType:protected] => Agent
                                    [name:protected] => Bob Downe
                                    [mbox:protected] => mailto:bob@downe.com
                                    [mbox_sha1sum:protected] => 
                                    [openid:protected] => 
                                    [account:protected] => 
                                )

然后我尝试从raw语句中提取名称,如下所示:

// take content from raw statements using getStatements() method
$further_output = $retrieve->content->getStatements();

这将生成Statement类的对象数组,在本例中为一个值的数组。

然后,我必须以某种方式从数组中取出对象,以便访问用于提取我想要的信息的方法。我就是这样做的:

// Get actor out of object
$extracted = $further_output[0]->getActor()->getName();
echo "<p>$extracted</p>"; // produces 'Bob Downe'

这似乎非常低效,我确信必须有更好的方法。

我有两个问题:

  1. 提取我想要的信息的最有效方法是什么?

  2. 为什么原始陈述显示&#39;受保护&#39;对于每个属性,例如[陈述:受保护],[身份证明:受保护],[已存储:受保护]等?

  3. 我研究了这些相关的链接,但它们没有解决我的问题:

    how to execute a query on tin-can statements

    Fetching statements from Learning Locker LRS using TinCan API

    如果有任何帮助,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

  1. 这是使用库提取特定信息的最有效方法。它只是你觉得效率低下的公共界面吗?什么会更“有效”?请注意,您需要进行错误检查,换句话说,检查请求是否成功,数组中是否有语句,以及是否定义了name属性。图书馆不能提前知道这些事情,并且设计被认为是与LRS进行通信的低级接口。

  2. 这是OOP的基本开发,请参阅http://php.net/manual/en/language.oop5.visibility.php或Google“受OOP保护”。最终在TinCanPHP中,您可以通过公共方法访问数据,以便我们可以保持封装。