Konfigurationspfade verändern

Aus APF Wiki [de]
Wechseln zu: Navigation, Suche

Durch verändern der ConfigurationProvider kann man seine ganz persönliche Konfigurationsstruktur erzeugen.

Der Anlass warum die folgenden Provider geschrieben wurden war, dass man die Konfiguration von einem Kontext leichter in einen anderen ändern kann. (Um zb eine zweite Seite anzulegen bei der dann nur einzelne Details verändert wurden.)

Vorgehensweise

Man erweitert einfach jene Provider die man benötigt und überschreibt die gewünschten Funktionen. In diesem Beispiel wurde nur der Pfad verändert.

    import('core::configuration::provider::ini', 'IniConfigurationProvider');
 
    class CMSIniConfigurationProvider extends IniConfigurationProvider {
 
        protected function getFilePath($namespace, $context, $language, $environment, $name) {
 
            // fallback for missing file extensions (backward compatibility for pre-1.13 config files)
            if (!preg_match('/\.' . $this->extension . '$/i', $name)) {
                $name = $name . '.' . $this->extension;
            }
 
            // assemble the context
            $contextPath = ($this->omitContext || $context === null ) ? '' : '/' . str_replace('::', '/', $context);
 
            // assemble file name
            $fileName = ($this->omitEnvironment || $environment === null) ? '/' . $name : '/' . $environment . '_' . $name;
 
            // using APPS__PATH is about 50 times faster than the registry!
            return APPS__PATH
            . '/config'
            . $contextPath
            . '/' . str_replace('::', '/', $namespace)
            . $fileName;
        }
    }

Damit man den neuen Provider auch verwenden kann muss man ihn für die Dateiendung registrieren. Dazu trägt man am besten in der Bootstrap Datei folgendes ein:

import('dev::CMS::core::provider','CMSIniConfigurationProvider');
ConfigurationManager::registerProvider('ini', new CMSIniConfigurationProvider());

Sofern man aber zb SQL Statements aus Dateien bezieht muss natürlich auch dieser Provider geändert werden.

import('core::database::config', 'StatementConfigurationProvider');
 
class CMSStatementConfigurationProvider extends StatementConfigurationProvider {
 
    protected function getFilePath($namespace, $context, $language, $environment, $name) {
 
        // fallback for missing file extensions (backward compatibility for pre-1.13 config files)
        if (!preg_match('/\.' . $this->extension . '$/i', $name)) {
            $name = $name . '.' . $this->extension;
        }
 
        // assemble the context
        $contextPath = ($this->omitContext || $context === null ) ? '' : '/' . str_replace('::', '/', $context);
 
        // assemble file name
        $fileName = ($this->omitEnvironment || $environment === null) ? '/' . $name : '/' . $environment . '_' . $name;
 
        // using APPS__PATH is about 50 times faster than the registry!
        return APPS__PATH
        . '/config'
        . $contextPath
        . '/' . str_replace('::', '/', $namespace)
        . $fileName;
    }
 
}

Anschließend muss er für die Endung "sql" ebenfalls registriert werden.

import('dev::CMS::core::provider','CMSStatementConfigurationProvider ');
ConfigurationManager::registerProvider('sql', new CMSStatementConfigurationProvider ());
Meine Werkzeuge
Namensräume
Varianten
Aktionen
menü
misc
Werkzeuge