2016-10-25 6 views
0

Tin Can PHPライブラリを使用して、LRSレコードからアクターエージェントの名前を抽出しようとしています。私はこのように私の検索の試みが進行するので、人のmbox形式の値(メールアドレス)を持っている:Tin Can PHPライブラリ:クエリ結果の処理

$actor = new TinCan\Agent(); 
$actor 
    ->setMbox('mailto:[email protected]'); 

// 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:[email protected] 
            [mbox_sha1sum:protected] => 
            [openid:protected] => 
            [account:protected] => 
           ) 
次のように私は、生のステートメントから名前を抽出しよう

:これは、このCASに、Statementクラスのオブジェクトの配列を生成

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

e値の配列。

私は、必要な情報を抽出するために使用されたメソッドにアクセスするために、何とか配列からオブジェクトを取得する必要があります。これは私がそれをした方法です:

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

これは非常に非効率的で、私はそれを行うより良い方法が必要であると確信しています。

  1. 私が欲しい情報を抽出する最も効率的な方法は何ですか:

    私は2つの質問がありますか?

  2. 生のステートメントは、それぞれのプロパティに対して「保護された」と表示されるのはなぜですか。 [ステートメント:プロテクト]、[ID:プロテクト]、[保存:プロテクト]など?

私は、関連性のこれらのリンクを研究してきたが、彼らは私の問題を解決していない:

how to execute a query on tin-can statements

Fetching statements from Learning Locker LRS using TinCan API

私はどのような援助のために感謝されます。

答えて

1
  1. これは、ライブラリで特定の情報を抽出する最も効率的な手段です。あなたが非効率であると感じるだけのパブリックインターフェイスですか?もっと効率的なのは何でしょうか?エラーチェック、つまりリクエストが成功したこと、配列にステートメントがあり、nameプロパティが定義されていることを確認する必要があることに注意してください。図書館はこれらの事柄を事前に知ることができず、設計によってLRSとのコミュニケーションのための低レベルのインターフェースとみなされます。

  2. これは基本的なOOP開発です。http://php.net/manual/en/language.oop5.visibility.phpまたはGoogleの「OOPで保護された」を参照してください。最終的にTinCanPHPでは、カプセル化を維持できるようにパブリックメソッドを使用してデータにアクセスします。

+0

ブライアンに感謝します。非常に便利な方法がある図書館の機能を見落としてしまったと思いました。 「保護された」問題に関して、私はそれが何らかの認証問題ではないことを嬉しく思います。明らかにOOPに関する私の知識には多くのギャップがあります。 –

関連する問題