paden / configuratie

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ozzie PHP

Ozzie PHP

28/02/2012 18:26:56
Quote Anchor link
Ik heb even hard jullie hulp nodig. Ik zit al een paar uur te kloten met het instellen van paden, maar ik kom er niet uit. Dit is globaal wat ik wil:

Ik wil een pad als volgt kunnen aanroepen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$paths
= Registry::get('paths');
echo $paths->private->configuration->database;
// toont het pad naar path/to/private/configuration/database/
echo $paths->private->configuration;
// toont het pad naar path/to/private/configuration/
?>


De paden staan als array in een configuratie-bestand en middels onderstaande code worden van de arrays objecten gemaakt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
static public function arrayToObject(array $array) {
  foreach ($array as $key => $value) {
    if (is_array($value)) {
      $array[$key] = self::arrayToObject($value);
    }
  }

  return (object) $array;
}

?>


Maar nu heb ik 2 problemen. Hoe kan ik op een logische manier de paden in het configuratiebestand plaatsen? Ik heb het nu op een dusdanige manier gedaan dat de arrays door het bovenstaande script worden omgevormd tot object. Dit werkt, maar ik moet heel veel subkeys gebruiken (niet handig). Probleem 2: ik moet overal een 'root' key aan toevoegen om de directory te kunnen opvragen.

Met die laatste opmerking bedoel ik het volgende. Ik kan de onderstaande directory niet aanroepen:

$paths->private->configuration;

"Configuration" is namelijk een array met subkeys en wordt daarom niet als property weggeschreven (hopelijk begrijpt iemand wat ik bedoel). Ik moet dus een key opgeven, in dit geval 'root'. En dan krijg je dus dit:

$paths->private->configuration->root;

Maar dat vind ik dus helemaal niet handig, want ik wil gewoon dit kunnen doen:

$paths->private->configuration;

Ik heb de paden nu als volgt in mijn configuratiebestand staan (zie hieronder), maar ik wil dat graag wijzigen naar een meer logische manier, maar ik heb echt geen idee hoe. Ik hoop dat iemand me kan helpen of een duwtje in de juiste richting kan geven want ik zie het echt even niet meer. Zo staan de paden nu in m'n configuratiebestand:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
$paths
= array();
$paths['private'] = array();
$paths['private']['root'] = '';
$paths['private']['configuration'] = array();
$paths['private']['configuration']['root'] = 'configuration/';
$paths['private']['configuration']['database'] = array();
$paths['private']['configuration']['database']['root'] = 'configuration/database';
$paths['private']['configuration']['database']['pdo'] = 'configuration/database/pdo';
?>


Tja, dit moet vast beter kunnen, maar hoe in godsnaam?

Wat ik dus wil is dat de paden handiger in het configuratiebestand komen te staan (zonder al die subkeys) en dat ik niet de key 'root' hoef te gebruiken, dus dat ik dit kan doen:

$paths->private->configuration;

in plaats van dit

$paths->private->configuration->root;

Alvast heel veel dank voor degene die me een eindje op weg helpt!!!!
 
PHP hulp

PHP hulp

04/12/2021 04:51:20
 
Tom Swinkels

Tom Swinkels

28/02/2012 18:51:25
Quote Anchor link
Waarom gewoon niet met een define?
Of met een get methode ophalen?

Ik doe het meestal op de volgende manier:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
        $this->path['SITE'] = 'http://www.' . $request->serverData['SERVER_NAME'] . '/' . $MAP;
        $this->path['IMAGES'] = 'http://www.' . $request->serverData['SERVER_NAME'] . '/' . $MAP . 'assets/images/';
        $this->path['CSS'] = 'http://www.' . $request->serverData['SERVER_NAME'] . '/' . $MAP . 'assets/css/';
        $this->path['JS'] = 'http://www.' . $request->serverData['SERVER_NAME'] . '/' . $MAP . 'assets/js/';
 
Wouter J

Wouter J

28/02/2012 19:21:34
Quote Anchor link
Je zou altijd ->root moeten gebruiken. Alleen ik begrijp niet echt wat je nou wilt met die $paths. Is paths bijv. domein.nl/hello/world/ of is het iets anders?
En het zijn een soort mappen (dat is me duidelijk). Dan is het juist logisch en beter als je $paths->private->configuration->root gebruikt i.p.v. $paths->private>configuration.
 
Ozzie PHP

Ozzie PHP

28/02/2012 19:51:43
Quote Anchor link
Wouter, nee $paths is een absoluut pad, dus bijvoorbeeld /data/var/private/controllers. Ik wil dan kunnen zeggen $paths->controllers.

Waarom vind jij het beter om wel root te gebruiken? Ik vind dat juist onhandig namelijk. Maar heb jij een oplossing? Ik zou graag weten hoe ik dit beter kan doen, vooral ook de opbouw van de arrays. Ik vind dit soort arrays nou niet echt charmant:

$paths['private']['configuration']['database']['pdo'] = 'configuration/database/pdo';

Ik hoop dat je me kan helpen!

@Tom: ik wil geen defines gebruiken. Dat vind ik niet zo netjes in OOP. De manier met een configuratiebestand vind ik op zich prima, maar ik moet even de juiste manier zien te vinden en dat lukt me dus niet.
 
Wouter J

Wouter J

28/02/2012 20:18:52
Quote Anchor link
Waarom geen defines? Voor dit soort standaard dingen gebruik ik juist defines. En dat defines niet bij OOP passen is hetzelfde dat variabele niet bij OOP passen. Het heeft niks met elkaar te maken. Sterker nog, OOP heeft juist een krachtige werking in samenwerking met constants.

En een andere manier voor die lange arrays:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$paths
= new StdClass();
$paths->private = new StdClass();

$config = $paths->private->configuration = new StdClass();
$config->root = 'configuration/';

$db = $config->database = new StdClass();
$db->root = 'configuration/database';
$db->pdo = 'configuration/database/pdo';
?>
 
Ozzie PHP

Ozzie PHP

28/02/2012 20:34:07
Quote Anchor link
Thanks voor het meedenken alleen ik denk dat dit in een configuratie file wat lastig te implementeren is.

Wat betreft defines... ik heb gehoord dat je zaken zo min mogelijk globaal moet maken en zo veel mogelijk moet koppelen aan een specifieke class. Vandaar mijn opmerking.
 
Wouter J

Wouter J

28/02/2012 20:37:32
Quote Anchor link
Ook constants kan je koppelen aan een klasse. En sommige constants zijn heel handig om gewoon globaal te gebruiken. Denk bijv. aan ROOT, LIB_ROOT, APP_ROOT, CONFIG_ROOT, enz.
 
Ozzie PHP

Ozzie PHP

28/02/2012 20:39:01
Quote Anchor link
ja, oke... dat wel... maar al m'n paden heb ik liever gekoppeld aan m'n paths class :)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.