如何处理单个CakePHP DataSource的多个API函数?

时间:2010-08-20 09:54:42

标签: cakephp datasource cakephp-1.3

我正在使用CakePHP 1.3。我已成功创建了一个Indeed DataSource,我正在寻找创建更复杂的数据源。我正在研究创建一个Yahoo Answers数据源,并想知道一些最佳实践。 API公开了一些功能:

1)能够搜索问题

2)能够在类别中获得问题

3)能够获得特定问题的详细信息

4)能够获得特定用户的详细信息

原样,我可能只使用问题和用户搜索功能。以下是我的问题:

  1. 我是否创建了1个可以执行任务或单独任务的数据源(即一个用于查找用户而另一个用于查找问题?

  2. 如果我创建1个DataSource,那么如何识别模型是否为$ this-> YahooUser-> find()(查找用户)vs $ this-> YahooQuestion-> find()(找到问题)这样我就可以为请求创建正确的URL。

1 个答案:

答案 0 :(得分:2)

将数据源视为数据库。例如,CakePHP与几个特定于数据库的数据源(即MySql,Oracle等)一起分发。您要做的是创建一个YahooAnswers数据源。

以下是文档中的示例,向您展示如何创建Twitter数据源,例如: http://book.cakephp.org/view/849/An-Example

这可以帮助您将YahooAnswers API实现为数据源。

更新:这是一个例子:

<?php 
pp::import('Core', 'HttpSocket');
class YahooAnswersSource extends DataSource {
    protected $_schema = array(
        'users' => array(
            'id' => array(
                'type' => 'integer',
                'null' => true,
                'key' => 'primary',
                'length' => 11,
            ),
            'name' => array(
                'type' => 'string',
                'null' => true,
                'key' => 'primary',
                'length' => 60
            ),
        ),
                'questions' => array(
            'id' => array(
                'type' => 'integer',
                'null' => true,
                'key' => 'primary',
                'length' => 11,
            ),
            'text' => array(
                'type' => 'string',
                'null' => true,
                'key' => 'primary',
                'length' => 140
            ),
        )
    );
    public function __construct($config) {
        $auth = "{$config['login']}:{$config['password']}";
        $this->connection = new HttpSocket(
            "http://{$auth}@yahooanswers.com/"
        );
        parent::__construct($config);
    }
    public function listSources() {
        return array('users','questions');
    }
...
?>