2010-04-15 18 views
2

Dans Kohana 3, comment puis-je remplacer/étendre une classe de module?Comment remplacer les classes de modules dans Kohana 3?

E.g. Je souhaite ajouter des fonctionnalités au module Auth spécifique à mon application. Dans ce cas, je souhaite étendre la classe Auth abstraite située dans le dossier classes du module Auth.

Quelle convention de dénomination dois-je utiliser pour ma classe Auth et où placer le fichier de classe dans le système de fichiers?

Répondre

10

Pour résoudre ce problème, il est important de comprendre la nature hiérarchique du framework Kohana 3. Quand il s'agit de remplacer ou d'étendre des modules, vous devez procéder comme suit.

Étendons le module Auth. Lorsque vous examinez la structure du système de fichiers du module Auth, vous remarquez que dans le répertoire classes se trouve un fichier appelé auth.php. Lorsque vous ouvrez ce fichier, vous voyez ce qui suit:

<?php defined('SYSPATH') OR die('No direct access allowed.'); 

abstract class Auth extends Kohana_Auth { } 

Voici une classe abstraite nommée Auth est définie qui étend la classe Kohana_Auth. Lorsque vous utilisez des références à la classe Auth dans votre application, vous faites référence à cette classe abstraite. L'implémentation réelle de Auth est actuellement conservée dans la classe Kohana_Auth qui se trouve dans le dossier Kohana qui fait partie de la structure de répertoire du module.

Pour étendre le module Auth, c'est-à-dire ajouter votre propre fonctionnalité, il vous suffit de placer un fichier auth.php dans le dossier classes du répertoire de votre application. Dans votre fichier auth.php, vous étendez votre version du module Auth en étendant la classe Kohana_Auth. Comme si:

<?php defined('SYSPATH') OR die('No direct access allowed.'); 

class Auth extends Kohana_Auth { 

    public function get_user() 
    { 
     $result = parent::get_user() 

     // implement your functionality here. 

     return $result; 
    } 

    public function my_added_functionality() 
    { 
    } 

} 

En raison de la nature hiérarchique du cadre, la classe abstraite Auth définie dans le cadre du module ne sera jamais chargé car le cadre charge votre Auth classe d'abord parce qu'il a la priorité. La classe que vous étendez, Kohana_Auth, fournit toutes les fonctionnalités auth authentiques que vous ne pouvez pas étendre et/ou remplacer.

Pour plus d'informations sur le comportement, consultez la partie this de la documentation.