Konfiguration etc. global verfügbar machen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Konfiguration etc. global verfügbar machen

    Guten Morgen zusammen!

    Zur Zeit entwickle ich eine Anwendung, welche sich im Laufe der Zeit aus mehreren Modulen zusammen setzen soll.
    Aktuell bin ich dabei die Corefunkionalitäten zu implementieren.

    Leider stoße ich hier auf ein Problem, für welches ich bisher noch keine Lösung habe.

    Auf dem angehänten Screenshot kann man den bisherigen Aufbau der Ordnerstruktur erkennen.

    Der Ordner "core" enthält alle Funktionalitäten, welche Anwendungsweit zur Verfügung stehen müssen.
    Wichtig hierbei sind vor allem die Klassen und auch die CoreConfig, da in letzterer die gesamten Core Pfade und andere Anwendungsweite Parameter gesetzt werden sollen.
    Die Initialisierung der Komponenten wird durch die CoreInit.php ausgeführt.

    Das ganze funktioniert auch soweit, wenn ich die "index.php" aufrufe (alle Parameter gesetzt, Instanzen ezeugt, etc.).

    Wenn ich allerdings das "Modul" Status aufrufe (wird über jQuery.load() erledigt, da die Ausgabe in ein DIV geladen wird), so sind alle Parameter, Instanzten, etc. nicht im Zugriff.
    Das ist ja erstmal kein Problem, da "works as designed" weil die außerhalb des aktuellen Scopes der "Core Index.php" liegen.

    Jetzt brauche ich aber eine Lösung, die es mir ermöglicht, das ich an einer beliebigen Stelle der Anwendung immer alles, was die "CoreInit.php" zur Verfügung stellt, auch im Zugriff habe.
    Ich denke da an eine Einbindung per "include / require_once()" der CoreInit.php. Allerdings bekomme ich dann - logischer Weise - Probleme mit den Pfadangaben. Und das möchte ich umgehen, damit ich nicht mit "../.." o.ä. ständig durch die Verzeichnisse springen muss.

    Ich hoffe, das jmd. mein Problem versteht und eine Idee hat, wie ich es lösen kann.

    Beste Grüße,
    GhostScripter
    Bilder
    • eclipse_projekt_uebersicht.jpg

      68,98 kB, 270×344, 508 mal angesehen
    In a world without walls and fences, who needs windows and gates?

    Kommando-Klappspaten - BFBC2
  • DU könntest ansich eine eigene Klasse nur für die Konfiguration schreiben.

    Quellcode

    1. abstract class CoreConfiguration {
    2. /**
    3. * configuration array
    4. *
    5. * @var array $configuration
    6. */
    7. private static $configuration;
    8. /**
    9. * load configuration data
    10. *
    11. */
    12. private static function init() {
    13. self::$configuration = array(); // hier die Daten aus der Konfiguration laden
    14. }
    15. /**
    16. * return configuration value for a variable
    17. *
    18. * @param string $variable
    19. * @return mixed
    20. */
    21. public static function getVariable($variable) {
    22. if(!is_array(self::$configuration)) {
    23. self::init();
    24. }
    25. if(isset(self::$configuration[$variable])) {
    26. return self::$configuration[$variable];
    27. }
    28. return false;
    29. }
    30. }
    Alles anzeigen


    Ansonsten empfehle ich dir noch zusätzlich mein Tutorial zum Thema [wiki]Autoload[/wiki]

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Szabo ()

  • Hallo Szabo,

    vielen Dank für Deine Antwort.

    Ich habe mir Dein [wiki]Autoload[/wiki] Tutorial zu Gemüte geführt.
    Der für mich bzw. mein Vorhaben relevante Ansatz wäre warscheinlich der letzte von Dir beschriebene mit der komplexen AutoLoad Variante.
    Der Aufbau der Klasse ist soweit auch klar, allerdings verstehe ich folgendes nicht:

    - Wo bekommt die Klasse mitgeteilt, wo die Verzeichnisse sind, die für [wiki]Autoload[/wiki] eingebunden werden sollen? (Wäre ja für jedes "Modul" ein weiteres Verzeichniss)
    - WIe kann ich mit dem Lösungsansatz realisieren, das ich an jeder Stelle der Anwendung die in der Konfiguration hinterlegten Pfade zur Verfügung habe?

    Zur Verdeutlichung habe ich mal einen Auszug aus meiner CoreConfig.cfg.php und der CoreInit.php unten angefügt.

    CoreInit.php

    Quellcode

    1. <?php
    2. date_default_timezone_set('Europe/Berlin'); // Fix Compiler Error if date() is called relying to the system timezone
    3. $loc = setlocale(LC_ALL, 'utf-8'); // Sprach bzw. Gebietsschema fuer Zeit / Datum etc. festlegen
    4. require_once('config/CoreConfig.cfg.php');
    5. require_once(_CORE_SRC.'CustomExceptions.php');
    6. $definedConstants = get_defined_constants(true);
    7. /* Zu Debug Zwecken
    8. echo '<pre>';
    9. print_r($definedConstants['user']);
    10. echo '</pre>';
    11. */
    12. require_once(_CORE_CLASSES.'CoreDB.class.php');
    13. try {
    14. $DB = CoreDB::getInstance();
    15. } catch (DBException $dbe) {
    16. print_r($dbe);
    17. } catch (PDOException $pdoe) {
    18. print_r($pdoe);
    19. } catch (ErrorException $erre) {
    20. print_r($erre);
    21. }
    22. ?>
    Alles anzeigen


    CoreConfig.cfg.php

    Quellcode

    1. <?php
    2. /**
    3. * Core Configuration
    4. */
    5. /**
    6. * ####################################################
    7. * ### Core Verzeichnisse
    8. * ####################################################
    9. */
    10. define('_CORE_BASE','core/');
    11. define('_CORE_LIBS',_CORE_BASE.'libs/');
    12. define('_CORE_CLASSES',_CORE_BASE.'classes/');
    13. define('_CORE_JAVASCRIPT',_CORE_BASE.'javascript/');
    14. define('_CORE_SRC',_CORE_BASE.'src/');
    15. /**
    16. * ####################################################
    17. * ### Smarty
    18. * ####################################################
    19. */
    20. define('_CORE_SMARTY_DIR',_CORE_LIBS.'smarty/');
    21. /**
    22. * ####################################################
    23. * ### Design
    24. * ####################################################
    25. */
    26. define('_CORE_DESIGN_DIR',_CORE_BASE.'design/');
    27. define('_CORE_DESIGN_IMAGE_DIR',_CORE_DESIGN_DIR.'img/');
    28. define('_CORE_DESIGN_STYLE_DIR',_CORE_DESIGN_DIR.'style/');
    29. /**
    30. * ####################################################
    31. * ### jQuery
    32. * ####################################################
    33. */
    34. define('_CORE_JQUERY_DIR',_CORE_LIBS.'jquery-ui-1.8.9.custom/');
    35. define('_CORE_JQUERY_CSS_DIR',_CORE_JQUERY_DIR.'css/custom-theme/');
    36. define('_CORE_JQUERY_JS_DIR',_CORE_JQUERY_DIR.'js/');
    37. /**
    38. * ####################################################
    39. * ### epiclock
    40. * ####################################################
    41. */
    42. define('_CORE_EPICLOCK_DIR',_CORE_LIBS.'epiclock/');
    43. define('_CORE_EPICLOCK_CSS_DIR',_CORE_EPICLOCK_DIR.'stylesheet/');
    44. define('_CORE_EPICLOCK_JS_DIR',_CORE_EPICLOCK_DIR.'javascript/');
    45. define('_CORE_EPICLOCK_RENDERERS_DIR',_CORE_EPICLOCK_DIR.'renderers/');
    46. define('_CORE_EPICLOCK_RENDERERS_RETRO_DIR',_CORE_EPICLOCK_RENDERERS_DIR.'retro/');
    47. define('_CORE_EPICLOCK_RENDERERS_RETROCOUNTDOWN_DIR',_CORE_EPICLOCK_RENDERERS_DIR.'retro-countdown/');
    48. /**
    49. * ####################################################
    50. * ### pChart
    51. * ####################################################
    52. */
    53. define('_CORE_PCHART_DIR',_CORE_LIBS.'pChart2.1.0/');
    54. define('_CORE_PCHART_CLASS_DIR',_CORE_PCHART_DIR.'class/');
    55. define('_CORE_PCHART_FONTS_DIR',_CORE_PCHART_DIR.'fonts/');
    56. define('_CORE_PCHART_PALETTE_DIR',_CORE_PCHART_DIR.'palettes/');
    57. ?>
    Alles anzeigen


    Ich hoffe, mein Problem bzw. meine Anforderung wird durch die beiden Dateipostings etwas deutlicher.
    In a world without walls and fences, who needs windows and gates?

    Kommando-Klappspaten - BFBC2
  • Ja, das mit den Namespaces wäre eine Möglichkeit.
    Nur leider löst das ggf. nur das Problem mit dem Zugriff auf die Core Klassen von jeder Stelle der Anwendung.
    Nicht aber das Verfügbarkeitsproblem der Konfigurationsvariablen wie z.B. die Pfade zum Core Layout etc.

    Und genau das ist es, was essentiell wichtig ist.
    In a world without walls and fences, who needs windows and gates?

    Kommando-Klappspaten - BFBC2