1

CakePHP コントローラーに SOAP サービスを実装する必要があります。公開された関数名は、グローバル名前空間にある必要があります (「SOAPController.Authenticate」ではなく「Authenticate」のように)。nuSOAP はその名前から関数を探す場所を推測するため、これにより、Authenticate をグローバル名前空間に実装する必要があります。一方、以下の例では、SOAPController の にアクセスできないため、CakePHP の API を使用できませんthisthisそのため、バインドされたパラメーターへの参照を維持しながら、グローバルスコープで「認証」に解決されるある種のクロージャーを何らかの方法で宣言する必要があると考えました。それは可能ですか?以下は間違ったコードです。

<?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();
        }
}
4

0 に答える 0