YII Webservice(SOAP) – 痛苦的24小时

YIIWebservice(SOAP)–痛苦的24小时

六月

9YII很强大,很高效,可以直接生成webservice。但是文档根本没说清楚该怎么用。只有Phonebookdemo给了我坚持到底的信心(因为Phonebookdemo里的webservice在flex里可以正常访问)。

按照yiiframework.com上的文档其实可以访问,但只能返回数字。。。。是的,返回字符串都不行。于是开始郁闷的调试。最终通过吧Phonebookdemo的数据库和所有功能移植到我项目上,进行逐个function的比对才找到问题所在。

好吧,总结几点经验,以免大家重蹈覆辙,先贴代码:

SiteController.php

/**

*Declaresclass-basedactions.

*/

publicfunctionactions(){

returnarray(

//webserviceactiondefine

'myService'=>array(

'class'=>'CWebServiceAction',

'classMap'=>array(

'Members',

),

),

);

/**

*Returnsallpredictions.

*@returnMembers[]themembersrecords

*@soap

*/

publicfunctiongetPredictions(){

returnMembers::model()->findAll();

}

}注意:

1服务器要打开soap功能,在phpinfo里搜soap,如果已经打开了的话有个大标题就是SOAP

2classMap其实只要是对应的Model就行,比如这里的Members。

3代码注释里*@returnMembers[]themembersrecordsMembers[]也必须和Model名称一致

4代码注释里*@soap这个也不能少,不然无法通过soap方式访问,想不到注释里还有这么多文章

5如果controller里有accessRules的话,得设定访客就可以访问getPredictions()

6Model里要公开的变量,需要用下面的形式标明:

/**

*@varintegerUIDofthisrecord

*@soap

*/

public$uid;

相关推荐