Zend_XmlRpc简单说明

原来我曾经说过,Zend_XmlRpc不好象不能传参数。今天又研究了下,看来原来打了个小马虎Tongue out

我现在以实现MetaWeblog API的例子,说明一下。跟官方文档实现上是差不多的。

首先,要实现一个Xmlrpc的服务端。非常简单,因为ZendFramework已经帮你把它作好了。Laughing

public function indexAction()
    {
        $server = new Zend_XmlRpc_Server();
        $server->setClass('MetaWeblogCore', 'metaWeblog');
        echo $server->handle();
     }

很明显第一行是创建一个Xmlrpc的服务实例。然后通过setClass()方法设置可调用的方法类和名字空间,当然,你可以使用addFunction这个方法,这样可调用的方法直接就可以写在控制中了。

注意$server->handle()返回的是Zend_XmlRpc_Response,而不是最终输出的对象。

现在来看看MetaWeblogCore这个类,这是一个MetaWeblog API的实现。查看规范中文版

  /**
     * The MetaWeblog API newPost
     *
     * @param string $blogid
     * @param string $username
     * @param string $password
     * @param struct $struct
     * @param boolean $publish
     * @return string
     */
    public function newPost($blogid, $username, $password, $struct, $publish)

原来我没有上面的注释,以为这只是PHPDoc里面的东西,就没有写。原来这几行是必须要的。。。

最后,再建立一个client来测试

public function indexAction()
    {
        $client = new Zend_XmlRpc_Client('http://localhost/xmlrpc');

        $blogid = '30';
        $username = 'username ';
        $password = 'password ';
        $struct = array(
            'title' => 'me',
            'description' => 'money'
        );
        $publish = true;
        $result =  $client->call('metaWeblog.newPost', array($blogid, $username, $password, $struct, $publish));

        $this->getResponse()->setHeader('Content-Type', 'text/xml', true);
        $this->getResponse()->setBody($result);
    }

setHeader()和setBody()用于设置返回值。虽然现在看上去还不向一个API都基本方法就是这样。

这里主要说明的那个小马虎。。。。

分享到: 更多