You are not logged in.

  • Login

Dear visitor, welcome to Coder Forum. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

1

Friday, July 22nd 2011, 10:02am

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
GhostScripter has attached the following image:
  • eclipse_projekt_uebersicht.jpg

2

Saturday, July 23rd 2011, 11:00am

DU könntest ansich eine eigene Klasse nur für die Konfiguration schreiben.

PHP Quellcode

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


Ansonsten empfehle ich dir noch zusätzlich mein Tutorial zum Thema Autoload

This post has been edited 1 times, last edit by "Szabo" (Jul 29th 2011, 3:22pm)


3

Monday, July 25th 2011, 8:07am

Hallo Szabo,

vielen Dank für Deine Antwort.

Ich habe mir Dein Autoload 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 Autoload 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

PHP Quellcode

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


CoreConfig.cfg.php

PHP Quellcode

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


Ich hoffe, mein Problem bzw. meine Anforderung wird durch die beiden Dateipostings etwas deutlicher.

4

Monday, July 25th 2011, 7:40pm

Zum Thema Autoloader/Verzeichnis Probleme kann ich übrigens Namespaces empfehlen.
Wir nutzen in der FIrma den "PSR-0", siehe http://groups.google.com/group/php-stand…-proposal?pli=1
Dazu gibt es sogar eine C-Extension.

5

Friday, July 29th 2011, 7:18am

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.

6

Friday, July 29th 2011, 9:10am

Entweder du implementierst, wie Szabo es schon vorgeschlagen hat, die CoreConfiguration als Singleton oder du nutzt eine Registry, mit dessen Hilfe du dann auch an jeder Stelle an die gewünschte Instanz kommst.

Similar threads

Social bookmarks