2012-08-12 38 views
0

我在我的CodeIgniter上安裝了zend_framework並加載了「Zend/Soap/AutoDiscover」。 現在我想將函數添加到autoDiscover併爲其生成WSDL。這是我做了什麼:在codeIgniter中使用zend_soap_autoDiscover

class Api extends CI_Controller { 

public function update_profile() { 


    $this->load->library('zend'); 
    $this->zend->load('Zend/Soap/AutoDiscover'); 

    $autodiscover = new Zend_Soap_AutoDiscover(); 
    $autodiscover->addFunction('hello'); 
    $autodiscover->handle(); 
} 

public function hello() { 
    return "Hello world"; 
} 

}

我應該怎麼做才能解決這個問題?

回答

0

這是因爲Zend_Soap_AutoDiscover需要簡單的全局函數,而不是addFunction方法中的方法名稱。如果你周圍的堆棧跟蹤捅你本身會在您添加的參數將被反對這種倒行(只是拋出異常前)檢查:

if (!is_string($function) || !function_exists($function)) { 
    // exception is thrown here 
} 

什麼,你可以轉而使用的是setClass方法。有了這個,你可以暴露每個類的公共方法。爲此,您可能會發現定義一個不同於其他類的構造函數是更爲可行的,該構造函數完成真正的工作,並且如果您有控制器,那麼只需從那裏委託給服務類。