Du bist nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: DeveloperTalk. Falls dies dein erster Besuch auf dieser Seite ist, lies bitte die Hilfe durch. Dort wird dir die Bedienung dieser Seite näher erläutert. Darüber hinaus solltest du dich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutze das Registrierungsformular, um dich zu registrieren oder informiere dich ausführlich über den Registrierungsvorgang. Falls du dich bereits zu einem früheren Zeitpunkt registriert hast, kannst du dich hier anmelden.

Erik

Profi

  • »Erik« ist der Autor dieses Themas

Beiträge: 1 274

Registrierungsdatum: 22.06.2011

Wohnort: Deutschland ;)

Danksagungen: 307

  • Private Nachricht senden

1

31.07.2011, 21:31

Config

Also, ich möchte meine Webapplikation mittels eines oder mehrerer Config-Files steuern (beeindruckend, ich weiß).
Aus Performancegründen werden diese direkt in PHP geschrieben, dass ist zwar für den Webmaster nicht so konfortabel, aber diese Configs sind ohnehin nicht zum editieren da (außer man versucht, das System absichtlich kaputt zu machen). Ich frage mich jetzt, wie ein Config-File jetzt konkret aussieht. Ich denke mal, dass die Config ihren Platz im Model, denn es geht ja darum, Daten aus dem Filesystem zu laden, zu verarbeiten und bereitzustellen.
Wie soll ich jetzt die Config genau machen und wie stell ich sie so zur Verfügung, dass das hinterher beim benutzen nicht soviel Tipparbeit ist?
Beste Webite im Internet ( ͡° ͜ʖ ͡°)
xinra.de

Alex

Fortgeschrittener

Beiträge: 372

Registrierungsdatum: 23.06.2011

Wohnort: /home/alex

Danksagungen: 117

  • Private Nachricht senden

2

01.08.2011, 03:03

Erste Antwort - die config-Datei sieht so aus, wie du es möchtest; deinen Bedürfnissen angepasst.

Zweite Antwort: Oft werden in config-Files einfach Konstanten festgelegt, z. B. wie folgt:

PHP-Quelltext

1
2
3
4
5
define("WEBSITE_NAME""foo bar");
define("WEBSITE_ADRESSE" "www.foobar.com");

define("MYSQLSERVER""127.0.0.1");
//und weitere (un)sinnvolle Konstrukte


Die Datei wird dann später einfach inkludiert, und dann kannst du halt auf die Konstanten zugreifen und z. B. den Websitenamen im Titel ausgeben, die Konstante für den Mysql-Server benutzen, usw..

Es gibt weiterhin den Ansatz, das ganze in eine hübsche Klasse zu verpacken, und dann später mit $config->getWebsiteName(); den Namen der Website ausgeben zu lassen.

Zugegeben, das Beispiel hinkt ein wenig hinterher, aber trotzdem :)

Wobei es bestimmt noch unendlich und einen andere Wege gibt :D
Und das ist jetzt auch nicht speziell auf MVC bezogen..
alexthinking.com - yet another computer weblog

Zitat

Chuck Norris knows the state of schroedinger's cat.

Es hat sich bereits 1 registrierter Benutzer bedankt.

Benutzer, die sich für diesen Beitrag bedankt haben:

Erik (01.08.2011)

psycho

Fortgeschrittener

Beiträge: 413

Registrierungsdatum: 26.06.2011

Danksagungen: 80

  • Private Nachricht senden

3

01.08.2011, 12:44

Eine weitere Möglichkeit wäre noch das ganze über ini-files zu machen.

Du kannst dann mit parse_ini_file dir die einzelne Teile auslesen lassen, du kannst des Weiteren auch Gruppen erstellen.

Um z.B. Gruppen festzulegen wie Mysql, Thumbnail etc.

Allerdings ist der Aufwand etwas schwerer um eine ordendliche ini-klasse zu machen, zum auslesen schreiben etc.
(Letzteres ist auf am Einsatz im CMS bezogen, wenn es z.B. einen Expertenmodus gibt, wo der Nutzer dann auch Zugriff auf die Konfigurationsdateien hat, war mal eine Idee von mir... :) )
Computer sind dazu da, uns die Arbeit zu
erleichtern, die wir ohne sie gar nicht hätten.

Es hat sich bereits 1 registrierter Benutzer bedankt.

Benutzer, die sich für diesen Beitrag bedankt haben:

Erik (01.08.2011)

Erik

Profi

  • »Erik« ist der Autor dieses Themas

Beiträge: 1 274

Registrierungsdatum: 22.06.2011

Wohnort: Deutschland ;)

Danksagungen: 307

  • Private Nachricht senden

4

01.08.2011, 12:50

1. ich finde Konstanten in den meisten Fällen zu overkill. Ich brauche die ganzen MySQL Sachen ja eigentlich nur einmal. Andererseits ist das durch den simplen zugriff sinnvoll für Sachen, die fast überall gebraucht werden, wie meine Speed-Variable.

$config->getWebsiteName() ist mir zu hardcoded, da würde ich dann vielleicht eher sowas wie $config->get("websiteName"); machen...

Das ist natürlich eigentlich schöner wegen dem OOP, aber ist auch mehr zu Tippen, zumal $config selbst ja auch kein globales Objekt ist. Außerdem kann ich da ne Exception schemeißen. Da ich aber wahrscheinlich eh keinen Bock habe, die abzufangen, wird das Script dann eh genauso gekillt, als wenn ich eine nicht vorhandene Konstante aufrufe...

Fragt sich jetzt nur, wie ich mich entscheiden soll... Danke jedenfalls für die Antwort :)

EDIT: Als ich angefangen habe zu schreiben war dein Post ncoh nicht da psycho :)
Ini-Files zu parsen dauert aber viel länger, als PHP-Datein zu includieren... Man kann die Config auch bearbeiten, in Form eines Java-Properties-Files, der so ähnlich ist, wie ne ini...
Beste Webite im Internet ( ͡° ͜ʖ ͡°)
xinra.de

Simon

Profi

Beiträge: 725

Registrierungsdatum: 14.06.2011

Danksagungen: 210

  • Private Nachricht senden

5

01.08.2011, 13:56

Allerdings ist der Aufwand etwas schwerer um eine ordendliche ini-klasse zu machen, zum auslesen schreiben etc.


Zur Vollständigkeit:
Fürs Parsen von INI-Dateien bietet PHP eine native Funktion an: parse_ini_file(...) ;)

Alex

Fortgeschrittener

Beiträge: 372

Registrierungsdatum: 23.06.2011

Wohnort: /home/alex

Danksagungen: 117

  • Private Nachricht senden

6

01.08.2011, 14:15

Das mit dem hardcoded stimmt, hatte ich gar nicht drüber nachgedacht. Könnte man allerdings auch einfach ein globales assoziatives Array nehmen, auch wenn das eher nicht so berauschend ist :D

Deswegen meinte ich bei mir ja auch das mit dem unsinnvoll. Man muss wirklich abwägen was man in der config braucht und was nicht :)

Der einzige Vorteil, wenn z. B. auch Sachen wie der DB-Server da erwähnt ist, ist dass man am Ende halt alles zusammen hat..

an ini-files hatte ich gar nicht gedacht :)
alexthinking.com - yet another computer weblog

Zitat

Chuck Norris knows the state of schroedinger's cat.

Simon

Profi

Beiträge: 725

Registrierungsdatum: 14.06.2011

Danksagungen: 210

  • Private Nachricht senden

7

01.08.2011, 14:18

getWebsiteName muss nicht Hardcoded sein.
Da könnte man die Magic Functions von PHP benutzen.
Genauer gesagt: __call($functionname, $args)

Dann könnte man prüfen ob die 1. 3 Zeichen "get" sind und dann mit dem hinteren Teil von functionname das selbe machen wie mit get("websitename");

Erik

Profi

  • »Erik« ist der Autor dieses Themas

Beiträge: 1 274

Registrierungsdatum: 22.06.2011

Wohnort: Deutschland ;)

Danksagungen: 307

  • Private Nachricht senden

8

01.08.2011, 15:24

Nochmal zur ini, auch die Funktion kann keinen einzelnen Wert auslesen, ohne die ganze datei zu lesen, das geht irgendwie nicht. Den overhead kann ich mir sparen, wozu ne ini Datei, wenn man die nciht editieren darf?

@Simon, ich weiß zwar dass das geht und ich habe darüber nachgedacht, aber irgendwie ist das irgendwie auch nciht soo geil.
1. Ist das zwar nicht harcoded, aber es sieht beim lesen so aus.
2. was ist, wenn ich in der Klasse ncoh andere getter habe? Ich glaube __call wird dann garnicht aufgerufen, wenns die methode gubt, aber wenn ich zufällig einen config key hab, der so heißt wie eine member variable mit getter?
Beste Webite im Internet ( ͡° ͜ʖ ͡°)
xinra.de

Ähnliche Themen

Verwendete Tags

Config, MVC, PHP