1

JSON でエンコードされたオブジェクトを Zend Framework JSON サーバーに送信する Java アプレットがあります。

私が抱えている問題は、コードが次のように設定されていることです。

サーバーコントローラー:

public function jsonAction()
{

$server = new Zend_Json_Server();
$Server->setClass('Application_Model_ClassObject', 'co');

if('GET' == $_SERVER['REQUEST_METHOD'])
{
    $server->setTarget('...')
           ->setEnvelope(Zend_Json_Server_Smd::ENV_JSONRPC_2);
    $smd = $server->getServiceMap();

    header('Content-Type: application/json');

    echo $smd;
    return
}

echo $server->handle();
}

クラスオブジェクト関数:

/**
* DoSomethign description
* @param ClassObject
*/
public function doSomething(Application_Model_ClassObject $obj)
{

    $someVariable = $obj->getSomeValue();
    ...
}

objのインスタンスである必要があるというエラー応答をサーバーから受け取ります。ClassObject

4

3 に答える 3

1

わかりましたので、これが私たちがやったことです(クイックアンドダーティバージョン)...もっと良い方法があると思いますが。

  1. 関数が任意のデータを受信できるように、型ヒントを削除しました。
  2. データの配列またはオブジェクトを処理する新しい関数を「Application_Model_ClassObject」に作成します。
  3. 「doSomething」に数行を追加して、残りは通常どおりに実行できるようにしました。

詳細は次のとおりです。

/**
* DoSomethign description
* @param ClassObject
*/
public function doSomething($data)
{
    $obj = new Application_Model_ClassObject();
    $obj->populate($data);

    $someVariable = $obj->getSomeValue();
    ...
}

/**
*
* Application_Model_ClassObject class
*/
class Application_Model_ClassObject
{
    ...

    public function populate($row)
    {
        if (is_array($row)) {
        $row = new ArrayObject($row, ArrayObject::ARRAY_AS_PROPS);
        }

        if (isset ($row->SomeValue)) {
        $this->setSomeValue($row->SomeValue);
        }

        return $this;
    }

}
于 2012-06-08T11:38:00.993 に答える
-1

型ヒント「ClassObject」を削除すると、doSomething メソッドは入ってくるすべてのデータを受け入れます。その後、doSomething メソッドは json 文字列をデコードし、それに対して何か役に立つことを行います。

于 2012-05-09T10:16:31.993 に答える
-3

パブリック関数doSomething(ClassObject obj){...}

ええと、強く型付けされていないので、通常、そのようなPHP関数を作成することはありません。通常、代わりに次のようになります。

パブリック関数doSomething($ obj){...}

いくつかのJava構文が混在したPHP関数を作成しようとしたようです。

于 2012-05-09T10:02:00.537 に答える