3

filterselectboxUI コントロール (DOJOなど)を持つユーザー作成ページ (コントローラー/モジュール: ユーザー) を構築していますusername。UI コントロールにはJson、 module (module name/controller)myServiceおよび actionとしてデプロイされたサービスが取り込まれますpopulatelist()

populatelistクライアントに対してデータを返しJson、クライアント Dojo UI 要素はそれをメモリ ストアとして使用します。

私は2つのモジュールを持っていUserますmyService. Userモジュールの場合、以下に示すように、デフォルトのページを register.phtml としてregisterセットアップしました。ユーザー入力の検証とデータ投稿のロジックを追加しました。

module.config.phpモジュールの:ユーザー

'defaults' => array(
                   'controller' => 'User\Controller\User',
                   'action'     => 'register',
                   ),

Json は module に登録されますmyServiceregister.phtmlは次のような呼び出しを行います。

myservice = new dojo.rpc.JsonService("myService/populatelist");
var dojoDeferredObject=myservice.getCategoryList();

//comment: getCtegoryList is actual method of remote object which returns the json data

URL as を開くと、JSONRPC 呼び出しhttp://localhost/userへの参照は完全に正常に機能します。JSON 呼び出しを as として解析し、必要なデータを取得します。myServicehttp://localhost/myService/populatelist

として URL にアクセスすると、 Json RPC 呼び出しごとに404 ページが見つからないというhttp://localhost/user/register例外が発生して失敗します。理由は、RPC 呼び出しが存在しないパス、つまり.http://localhost/user/myService/populatelisthttp://localhost/myService/populatelist

この問題の原因となっている構成をどこかで見逃しました。Json service Module のパスをハードコーディングしたくありませんmyService

問題は次の行だと思います:

$server->setTarget('myService/populatelist'); 

以下のコードでは、Json サービスのセットアップに使用されます。これは、存在しないパスに加算されます。しかし、Jsonサービス用に別のモジュールが必要なため、どうすれば制御できるかわかりません。

$class = "MOCAPI\Model\MOCGuest";
        $server = new Server();
        $server->setClass($class);
        //echo $_SERVER['REQUEST_METHOD'];
        if ('GET' == $_SERVER['REQUEST_METHOD']) {
            $server->setTarget('myService/populatelist')
                   ->setEnvelope(Smd::ENV_JSONRPC_2);
            $smd = $server->getServiceMap();
            // Set Dojo compatibility:
            $smd->setDojoCompatible(true);
            header('Content-Type: application/json');
            echo $smd;
            return $this->getResponse();
        } else {
            //$server->handle();   
        }
4

1 に答える 1

0

raw の代わりに、ルートとurl()ヘルパーを使用して URL と相対パスと絶対パスを作成する必要があります'myService/populatelist'

https://framework.zend.com/manual/2.4/en/modules/zend.view.helpers.url.htmlのドキュメントを確認してください(バージョン 2.4 ですが、zf2.* と zf3 ではほぼ同じです)。

于 2016-08-10T08:56:18.990 に答える