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.