CakePHP コントローラーに SOAP サービスを実装する必要があります。公開された関数名は、グローバル名前空間にある必要があります (「SOAPController.Authenticate」ではなく「Authenticate」のように)。nuSOAP はその名前から関数を探す場所を推測するため、これにより、Authenticate をグローバル名前空間に実装する必要があります。一方、以下の例では、SOAPController の にアクセスできないため、CakePHP の API を使用できませんthis
。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();
}
}