3

我正在构建一个用户创建页面(控制器/模块:用户),它具有 UI 控件(DOJOfilterselectboxusername)。UI 控件填充了Json部署为 module (module name/controller)myService和 action的服务populatelist()

populatelist将数据返回Json给客户端,客户端 dojo ui 元素将其用作内存存储。

我有 2 个模块,User并且myService. 对于User模块,我registerregister.phtml中设置了默认页面,如下所示。我为用户输入验证和数据发布添加了逻辑。

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

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

您应该使用 routes 和url()helper 来构建 url 以及相对路径和绝对路径,而不是 raw '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 回答