Ich möchte in der Class GXCoreLoader die Methoden getService und _getPersonalDataFactory erweitern. Zusätzlich wird für meine Erweiterung eine zusätzliche Methode benötigt. Erstelle ich in meinem Modul in GXModules im Ordner overloads meine Erweitungsklasse "class IS_GXCoreLoader extends IS_GXCoreLoader_parent" und erweitere die o.g. Methoden mit: PHP: case 'OfferObject': $factory = $this->_getOfferServiceFactory(); return $factory->createOfferObjectService(); break; case 'OfferRead': $factory = $this->_getOfferServiceFactory(); return $factory->createOfferReadService(); break; case 'OfferWrite': $factory = $this->_getOfferServiceFactory(); return $factory->createOfferWriteService(); break; bzw. mit: PHP: $this->getService('OfferRead'), $this->getService('OfferWrite'), hagelt es 500er Error. Er findet IS_GXCoreLoader_parent nicht... Ich habe nun notgedrungen einen eigenen Loader "StaticIS_GXCoreLoader" welcher nur meine Änderungen beinhaltet gebaut und eine weitere "class IS_GXCoreLoader" erstellt, welche von GXCoreLoader extendet. Funzt prima, jedoch stellt sich für mich die Frage wieso das mit den Overloading nicht funktioniert. Im modul spreche ich den Loader so an: PHP: /** @var offerWriteService */$this->offerWriteService = StaticIS_GXCoreLoader::getService('OfferWrite'); Zur Info: in "StaticIS_GXCoreLoader" sieht so aus: PHP: class StaticIS_GXCoreLoader{ /** * GXCoreLoader Instance * * @var GXCoreLoaderInterface */ protected static $IS_gxCoreLoader; /** * Class Constructor * * @throws BadFunctionCallException */ public function __construct() { throw new BadFunctionCallException('This class is for static use only.'); } /** * Get a service object instance. * * @param string $serviceName * * @return object */ public static function getService($serviceName) { $IS_gxCoreLoader = self::_getGXCoreLoader(); $service = $IS_gxCoreLoader->getService($serviceName); return $service; } /** * Method depends on CodeIgniter database library. * * @return CI_DB_query_builder */ public static function getDatabaseQueryBuilder() { $IS_gxCoreLoader = self::_getGXCoreLoader(); $databaseQueryBuilder = $IS_gxCoreLoader->getDatabaseQueryBuilder(); return $databaseQueryBuilder; } /** * Method depends on PHP DebugBar library. * * @return DebugBar */ public static function getDebugBar() { $IS_gxCoreLoader = self::_getGXCoreLoader(); $standardDebugBar = $IS_gxCoreLoader->getDebugBar(); return $standardDebugBar; } /** * Method depends on PHP DebugBar library. * * @return array */ public static function getDebugBarAssets() { $IS_gxCoreLoader = self::_getGXCoreLoader(); $debugBarAssets = $IS_gxCoreLoader->getDebugBarAssets(); return $debugBarAssets; } /** * Method depends on CodeIgniter database library. * * @return CI_DB_utility */ public static function getDatabaseUtilityHelper() { $IS_gxCoreLoader = self::_getGXCoreLoader(); $databaseUtilityHelper = $IS_gxCoreLoader->getDatabaseUtilityHelper(); return $databaseUtilityHelper; } /** * Method depends on CodeIgniter database library. * * @return CI_DB_forge */ public static function getDatabaseForgeHelper() { $IS_gxCoreLoader = self::_getGXCoreLoader(); $databaseForgeHelper = $IS_gxCoreLoader->getDatabaseForgeHelper(); return $databaseForgeHelper; } /** * Returns an instance of the ThemeControl. * * @return \ThemeControl */ public static function getThemeControl() { $IS_gxCoreLoader = self::_getGXCoreLoader(); $themeControl = $IS_gxCoreLoader->getThemeControl(); return $themeControl; } /** * Get GX Core Loader object instance. * * @return GXCoreLoaderInterface */ protected static function _getGXCoreLoader() { if (self::$IS_gxCoreLoader === null) { /** * If the MainFactory cache is not fully built, the creation of the GXCoreLoaderSettings and GXCoreLoader * objects fails, because of interdependencies. Including the necessary files beforehand solves the problem. */ include_once DIR_FS_CATALOG . 'GXModules/IndivStyle/IndivAngebot/Loaders/IS_GXCoreLoader/IS_GXCoreLoader.inc.php'; $IS_gxCoreLoaderSettings = MainFactory::create('GXCoreLoaderSettings'); self::$IS_gxCoreLoader = MainFactory::create('IS_GXCoreLoader', $IS_gxCoreLoaderSettings); } return self::$IS_gxCoreLoader; }} Die "IS_GXCoreLoader" sieht so aus: PHP: class IS_GXCoreLoader extends GXCoreLoader{ public function getService($serviceName) { switch($serviceName) { case 'OfferObject': $factory = $this->_getOfferServiceFactory(); return $factory->createOfferObjectService(); break; case 'OfferRead': $factory = $this->_getOfferServiceFactory(); return $factory->createOfferReadService(); break; case 'OfferWrite': $factory = $this->_getOfferServiceFactory(); return $factory->createOfferWriteService(); break; } } /** * Get an offer service factory object. * * @return AbstractOfferServiceFactory */ protected function _getOfferServiceFactory() { if ($this->offerServiceFactory === null) { $db = $this->getDatabaseQueryBuilder(); $this->offerServiceFactory = MainFactory::create('OfferServiceFactory', $db); } return $this->offerServiceFactory; } function _getPersonalDataFactory() { //parent::_getPersonalDataFactory(); if (null === $this->personalDataServiceFactory) { $this->personalDataServiceFactory = MainFactory::create('PersonalDataServiceFactory', $this->getService('OfferRead'), $this->getService('OfferWrite') ); } return $this->personalDataServiceFactory; }}
@Steffen (indiv-style.de) Das Überladen der Core Klasse wie den GXCoreLoader ist leider nicht möglich. Das Erstellen des eigenen CoreLoaders ist daher der richtige Weg. Da dein eigener Loader aber auch im /GXModules/ liegen kann, solle da ja eigentlich kein größers Problem sein.
Danke für die Rückmeldung. Das mit dem eigenen Loader ist kein Problem. Er liegt im Ordner GXModules/IndivStyle/MMeinModul/Loader/ und funktioniert perfekt. Ich hatte nur eben das Problem mit dem überladen. Das dies nun nicht geht und ich den richtigen Weg gefunden habe, ist alles gut.