View Issue Details

IDProjectCategoryView StatusLast Update
0000224Adventure PHP FrameworkNeues Feature // New Featurepublic2015-10-12 12:19
ReporterdingsdaAssigned ToChristianAchatz 
PrioritynormalSeverityfeatureReproducibilityN/A
Status closedResolutionfixed 
Product Version2.1 
Target Version3.0Fixed in Version3.0 
Summary0000224: tiefere sektionen der Konfiguration erreichen, wie bei ini-Konfiguration
Descriptionaktuell ist es nur bei einer ini-Konfiguration möglich über

$section->getValue('subsection.subsubsection.value')

auf den wert von value zuzugreifen, weil die values in der schreibweise auch in der ini-konfiguration vorhanden sind.

das hat mehrere nachteile:

* beim languageLabelTag und subklassen davon kann man nur bei einer ini-Konfiguration die tiefe strukturen für die konfiguration nutzen. bei allen anderen konfigurationen kann man nur flache hierarchien nutzen
* nutzt man die ini-konfiguration und diesen "trick" in seinem code, kann man nicht ohne größere code-umstellungen auf anderen konfigurations-formate umsteigen.
* der zugriff ist aktuell nur auf den lesenden zugriff der werte beschränkt
  
  $section->setValue('subsection.subsubsection.value', 'test');
  $provider->saveConfiguration(......., $section);
  
  das würde nicht funktionieren, das der iniConfigurationProvider alle namen
  mit punkt auslässt beim speichern
* es kann nur von der obersten section auf das unterste value zugegriffen werden.
  für alles dazwischen muss wieder der längere weg genutzt werden

die idee:
  ein optionaler parameter bei den methoden der konfiguration. wenn dieser gesetzt ist wird nicht in der aktuellen section nach dem value oder der section geschaut, sondern in der tieferen ebene.
als beispiel:

$section->getValue('subsection.subsubsection.value', $default=null, $delimiter='.');

wird intern verarbeitet zu
$section
    ->getSection('subsection')
    ->getSection('subsubsection')
    ->getValue('value', $default=null);

der dritte parameter ist hier also neu. default wäre er null. man kann für ihn jedes beliebige zeichen wählen, dass man als trennzeichen zwischen den sections wählen möchte.

es ginge also auch

$section->getValue('subsection/subsubsection/value', $default=null, $delimiter='/');

ähnlich sieht es für die anderen methoden aus. z.b.

$section->getSection('subsection/subsubsection', $delimiter='/');

nutzung von getstring sieht dann z.b. so aus:

         <html:getstring
               namespace="..."
               config="labels.extension"
               entry="register.form.hint"
               delimiter="."
         />

man spart sich dadurch etwas code und hat auch eine einheitlichere API für die konfigurationen.

hab das feature schon fast fertig und mach heute abend nen pull request. muss nur noch ein paar stellen migrieren.
die migration von altem code ist recht einfach sein mit regex.
performance-probleme konnte ich nicht feststellen
Tagsconfiguration
Codereferenz: ([Datei]:[Zeile])
Namespaceconfig

Relationships

child of 0000202 assigneddingsda Ini-Konfigurationsdateien übersichtlicher machen 

Activities

dingsda

2014-07-08 01:31

developer   ~0000454

Last edited: 2014-07-08 01:33

View 2 revisions

pull request gemacht:
https://github.com/AdventurePHP/code/pull/6

falls das issue akzeptiert wird, könnte man auch die möglichkeit bieten, das ganze über die configurationProvider zu steuern, ob man prinzipiell tiefere ebenen erreichen möchte und welchen delimiter man nutzen möchte.

$configProvider -> enablePathDelimiter('.');
oder ähnliches

dann würde der aktuelle code komplett kompatible sein zu vorher

dingsda

2014-07-09 13:08

developer   ~0000458

neuer vorschlag
https://github.com/AdventurePHP/code/pull/10

entspricht jws vorschlag b aus http://tracker.adventure-php-framework.org/view.php?id=202#c455

fest vorgegebener delimiter in baseConfiguration.

für ini-benutzer sollte sich dadurch nichts ändern.

wer einen anderen provider nutzt und in den konfigurationen namen mit punkt nutzt, wird wohl umstellen müssen.

jwlighting

2014-07-09 15:31

administrator   ~0000460

Finde das soweit schon recht gut gelöst. Habe dir in einer Zeile noch einen Kommentar ein deinen Pull-Request dran geschrieben.

Was mir noch nicht ganz aufgeht ist die gemischte Verwendung von BaseConfiguartion::$sectionDelimiter und IniConfigurationProvider::$NAMESPACE_DELIMITER. Ich hab mangels Zeit jetzt nicht detailiert drüber geschaut, mir drängt sich aber der Verdacht auf, dass es da Gemeinsamkeiten gibt, die evtl. eine der beiden Variablen überflüssig machen.

Im Zweifel finde ich die (statische) Klassenvariable übrigens schöner.

Grüße :)

ChristianAchatz

2015-03-12 21:12

administrator   ~0000551

@dingsda: habe das Thema von dir nun übernommen und implementiere eine Lösung basierend auf deinem Pull-Request für 3.0 inkl. Unit Tests.

ChristianAchatz

2015-03-16 16:02

administrator   ~0000552

Implementierung und Unit Tests erledigt. Dokumentation ausstehend.

ChristianAchatz

2015-03-17 18:59

administrator   ~0000556

Dokumentation erledigt.

Issue History

Date Modified Username Field Change
2014-07-07 12:27 dingsda New Issue
2014-07-07 12:27 dingsda Status new => assigned
2014-07-07 12:27 dingsda Assigned To => dingsda
2014-07-07 12:31 dingsda Relationship added child of 0000202
2014-07-07 12:36 dingsda Description Updated View Revisions
2014-07-07 12:38 dingsda Description Updated View Revisions
2014-07-07 12:39 dingsda Tag Attached: configuration
2014-07-07 12:39 dingsda Description Updated View Revisions
2014-07-08 01:31 dingsda Note Added: 0000454
2014-07-08 01:33 dingsda Note Edited: 0000454 View Revisions
2014-07-09 13:08 dingsda Note Added: 0000458
2014-07-09 15:31 jwlighting Note Added: 0000460
2015-03-12 21:11 ChristianAchatz Assigned To dingsda => ChristianAchatz
2015-03-12 21:12 ChristianAchatz Note Added: 0000551
2015-03-16 16:02 ChristianAchatz Note Added: 0000552
2015-03-17 18:59 ChristianAchatz Note Added: 0000556
2015-03-17 18:59 ChristianAchatz Status assigned => resolved
2015-03-17 18:59 ChristianAchatz Fixed in Version => 3.0
2015-03-17 18:59 ChristianAchatz Resolution open => fixed
2015-10-12 12:19 ChristianAchatz Status resolved => closed