2010-08-20 18 views
1

J'utilise CakePHP 1.3. J'ai créé avec succès une source de données en effet et cherche à créer des plus compliquées. Je cherche à créer une base de données Yahoo Answers DataSource et je m'interrogeais sur quelques bonnes pratiques. L'API expose quelques fonctions:Comment traiter plusieurs fonctions API pour une source de données CakePHP unique?

1) Capacité à rechercher des questions

2) Possibilité d'obtenir des questions dans une catégorie

3) Capacité d'obtenir des détails sur une question spécifique

4) Possibilité d'obtenir des détails sur un utilisateur spécifique

En l'état, je ne pourrais utiliser que les fonctions de recherche de questions et d'utilisateurs. Voici mes questions:

  1. Est-ce que j'ai créé 1 DataSource qui peut effectuer les tâches ou les différents (soit un pour trouver des utilisateurs et une autre pour trouver des questions

  2. Si je crée 1 DataSource alors comment faire? Je m'identifie si le modèle est $ this-> YahooUser-> find() (find users) vs $ this-> YahooQuestion-> find() (find questions) afin que je puisse créer le bon URL pour la requête

Répondre

2

Pensez à une source de données en tant que base de données, par exemple, CakePHP est distribué avec plusieurs bases de données spe sources de données spécifiques (c.-à-d. MySql, Oracle, etc.) Ce que vous voulez faire est de créer une source de données YahooAnswers.

est un exemple ici dans les documents pour vous montrer comment créer une source de données Twitter par exemple: http://book.cakephp.org/view/849/An-Example

Cela devrait vous aider à mettre en œuvre l'API YahooAnswers comme source de données.

MISE À JOUR: Voici un exemple:

<?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'); 
    } 
... 
?> 
+0

Ive vu l'exemple et il ne couvre pas vraiment comment développer un DataSource où vous pouvez récupérer plusieurs sources. J'ai mentionné que j'ai déjà créé DataSoources dans le passé. Ma question spécifique portait sur la façon d'aborder ma situation spécifique. –

+0

Vous ne tirez pas de plusieurs sources êtes-vous? Vous tirez d'une source ... YahooAnswers. Cette source de données aurait plusieurs schémas (tables) qui référencent les utilisateurs et les questions. J'ai fait un montage pour que vous puissiez voir ce que je veux dire. Pensez donc à l'API (YahooAnswers) en tant que BASE DE DONNÉES et aux données (utilisateurs et questions) en tant que TABLES dans la base de données. –

+0

Je vois, je vois! ok, alors je veux créer un modèle YahooUsers et un modèle YahooQuestion pour interroger les données de YahooAnswers. Comment pourrais-je savoir dans mon DataSource pour tirer d'une ListSource particulière (table alias)? $ this-> YahooUser-> find ('all') vs $ this-> YahooQuestion-> find ('all') Il me semble que je devrai passer un paramètre de l'objet modèle à l'objet DataSource pour faites-lui savoir quelle source accéder. J'ai regardé le manuel et il n'y a aucune mention de ceci. –