CakePHP + nuSOAP - 将全局函数暴露为闭包或使用控制器外部的模型?

时间:2013-01-18 14:00:59

标签: cakephp nusoap

我需要在CakePHP控制器中实现SOAP服务。公开的函数名称必须位于全局名称空间中(如“Authenticate”,而不是“SOAPController.Authenticate”)。这迫使我在全局命名空间中实现Authenticate,因为nuSOAP将推断从其名称中查找函数的位置。另一方面,在下面的示例中,我不能使用CakePHP的API,因为我无法访问SOAPController的this。这就是为什么我认为我应该以某种方式声明某种闭包,它将在全局范围内解析为'Authenticate',同时通过bound参数保持对this的引用。那可能吗?以下是错误的代码:

<?php
App::uses('AppController', 'Controller');
App::import('Vendor', 'nusoap', 
        array('file' => 'nusoap'.DS.'lib'.DS.'nusoap.php')
);
/**
 * SOAP Controller
 *
 */


class SOAPController extends AppController {

        public function index()
        {
                $namespace = '';
                $server = new soap_server();
                $server->debug_flag = false;
                $server->configureWSDL("PAI2WSDL", $namespace,
                        "http://localhost/pai2/SOAP/?wsdl");
                $server->wsdl->schemaTargetNamespace = $namespace;

                function Authenticate($login,$haslo){
                        $this->log("TEST"); //won't work!
                        return true;
                }

                $server->register('Authenticate',
                  array('ContractorId' => 'xsd:int', 'Password'=>'xsd:string'), 
                  array('return' => 'xsd:boolean'),
                  $namespace,
                 $namespace . '#Authenticate',
                  'rpc',
                  'encoded'
                );

                $HTTP_RAW_POST_DATA = isset($GLOBALS['HTTP_RAW_POST_DATA'])
                          ? $GLOBALS['HTTP_RAW_POST_DATA'] : '';
                $server->service($HTTP_RAW_POST_DATA);
                $this->autoRender = false;
                exit();
        }
}

0 个答案:

没有答案