APF-Tracker

Adventure PHP Framework Issue Management


View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0000224Adventure PHP FrameworkNeues Feature // New Featurepublic2014-07-07 12:272015-10-12 12:19
Reporterdingsda 
Assigned ToChristianAchatz 
PrioritynormalSeverityfeatureReproducibilityN/A
StatusclosedResolutionfixed 
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
Attached Files

- Relationships
child of 0000202assigneddingsda Ini-Konfigurationsdateien übersichtlicher machen 

-  Notes
(0000454)
dingsda (developer)
2014-07-08 01:31
edited on: 2014-07-08 01:33

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

(0000458)
dingsda (developer)
2014-07-09 13:08

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.
(0000460)
jwlighting (administrator)
2014-07-09 15:31

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 :)
(0000551)
ChristianAchatz (administrator)
2015-03-12 21:12

@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.
(0000552)
ChristianAchatz (administrator)
2015-03-16 16:02

Implementierung und Unit Tests erledigt. Dokumentation ausstehend.
(0000556)
ChristianAchatz (administrator)
2015-03-17 18:59

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


Copyright © 2000 - 2017 MantisBT Team
Powered by Mantis Bugtracker