2010-06-25 7 views
1

Je veux étendre, pas simplement créer une nouvelle instance d'une classe que j'ai assis dans mon répertoire de fournisseurs. Je ai googlé et lu les docs mais je ne vois aucun soutien pour cela. Puis-je faire une importation d'application de la classe tierce, puis écrire la classe étendue suivie d'un composant qui utilisera ma classe enfant?comment est-ce que j'ai prolongé les classes tierces dans cakephp?

-à-dire

/* vendors/yahooapi/yahoo.class.php */ 
class YahooAPI { 
    var $key = 'demo'; 
} 

/* controllers/components/yahoo.php */ 
App::import("Vendor", "YahooAPI", array("file"=>"yahooapi.class.php")); 

class Yahoov2 extends YahooAPI { 
    var $key = 'newKey'; 
    function go() {} 
} 

YahooComponent extends Object { 
    function goFaster() { 
     $a = new Yahoov2; 
     return $a->go() * 2; 
    } 

}

+0

Il reste PHP dans CakePHP, et cela devrait fonctionner parfaitement. Avez-vous un problème spécifique? – deceze

+0

non, je voulais juste m'assurer que je ne le fais pas le long chemin ou quoi que ce soit qui va à l'encontre des normes Cake.Thanks! –

Répondre

1

Fondamentalement, je vais vous dire comment je le ferais (au moins je l'ai fait dans certains projets):

1 ajouter vos fournisseurs de fournisseurs /yahooapi/yahoo.class.php comme vous l'avez fait

2 créer un fichier dans les vendeurs/yahooapi/ou à l'extérieur dans les fournisseurs/qui étendra la classe des fournisseurs d'origine disons vendeurs/yahoov2.php dire

include_once('.../vendors/yahooapi/yahoo.class.php'); 
class Yahoov2 extends YahooAPI { 
var $key = 'newKey'; 
function go() {} 
} 

3 Enfin inclure dans le composant votre numéro de poste que vous avez fait dans votre contrôleur.

Je crois que l'extension de la classe directement dans votre contrôleur ferait l'affaire, mais c'est vraiment une question de goût.

+0

Si vous pouvez obtenir 'App :: import' pour votre fichier, alors bon, sinon - comme le souligne Deceze - vous pouvez toujours vous rabattre sur du PHP pur comme le montre l'exemple de Nik ici. – deizel

+0

Je suis d'accord que App :: import est plus de style Cake, mais je ne suis pas sûr que App :: import fonctionnerait dans Vandors. Ce que j'ai fait dans le passé est App :: import ('Vendor', 'core_vendor'); App :: import ('Fournisseur', 'ext_vendor'); Dans le composant. C'est vraiment une question de goût :) –

+0

Au moment du chargement du fichier fournisseur, la classe 'App' a été chargée depuis longtemps et peut être utilisée n'importe où. J'utiliserais 'App :: import' autant que possible, car cela vous laisse un peu plus de flexibilité lorsque vous déplacez des fichiers. – deceze