Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Eigene Projekt-Konfigurationsdatei

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Eigene Projekt-Konfigurationsdatei

    Ich kenne es aus einigen Frameworks das die spezielle Konfigurationsdateien haben. Z.B. Codeigniter oder Symfony 2.

    Ich bräuchte für mein aktuelles Projekt auch eine solche Konfigurationsdatei.

    Dabei will ich es mir nicht unnötig kompliziert machen und dachte da an eine ähnliche Lösung wie bei Codeigniter, dieser greift auf ein Array zurück.

    PHP-Code:

    $config
    ['einstellung1'] = "Foo";
    $config['einstellung2'] = "Bar"
    Allerdings ist mir nicht klar wie ich später diese Konfigurationen in meinen verschiedenen Klassen abrufen kann/ soll.

    Kann mir da jemand helfen? Eventuell gut zu wissen wäre ob das so überhaupt gut ist, oder ob dafür eine bessere Lösung gibt.

    MfG
    - Laravel


  • #2
    Was heißt:
    Allerdings ist mir nicht klar wie ich später diese Konfigurationen in meinen verschiedenen Klassen abrufen kann/ soll.
    Suchst du nach Dependency Injection?

    Eine Variante inklusive Beispiel:
    - Es gibt eine Klasse für die config
    - Die Klasse wird einmalig instanziiert
    - Beim Instanziieren einer Klasse, die Zugriff auf die Config benötigt, wird die Config-Instanz an den Konstruktor übergeben:

    index.php:
    PHP-Code:
    require 'Config.php';
    $config = new Config;

    require 
    'ExampleClass.php';
    $object = new ExampleClass($config);
    $object->doSomething(); 
    ExampleClass.php
    PHP-Code:
    class ExampleClass {
        protected 
    $config;

        public function 
    __construct(Config $config)
        {
            
    $this->config $config;
        }

        public function 
    doSomething()
        {
            
    $value $this->config->get('key');
        }

    Config.php:
    PHP-Code:
    class Config {
        protected 
    $storage;

        public function 
    __construct()
        {
            
    $this->storage = require 'config_file.php';
        }
       
        public function 
    get($key)
        {
            return 
    $this->storage[$key];
        }

    config_file.php:
    PHP-Code:
    return array(
        
    'einstellung1' => 'Foo',
        
    'einstellung2' => 'Bar',
    ); 
    Achtung: Das ist ein Lehrbeispiel und stellt keine Aufforderung dar, es genau so zu umzusetzen.
    Um Klassen zu laden gibt es Composer.
    Um Dependency Injection können sich fertige Lösungen wie PHP-DI kümmern.

    Kommentar


    • #3
      Ich möchte nach Möglichkeit keine Config-Klasse. Ich würde es bevorzugen eine Art globales Array für meinen Namespace zu haben.

      Folgendes soll das mal verdeutlichen:

      PHP-Code:
      config.php:

      namespace 
      Test;

      $config[0] = 'Bla';
      $config[1] = 'Blu';


      irgendeineKlasse.php:

      namespace 
      Test;

      use 
      Test\config.php;

      class 
      IrgendeineKlasse
      {
          public function 
      irgendwas($bla)
          {
               if(
      $config[0])
               {
                    return 
      $bla;
               }

      - Laravel

      Kommentar


      • #4
        So wie du ein Objekt per Konstruktor an eine Klasse übergeben kannst, geht das natürlich auch mit einem Array.

        Warum möchtest du keine Klasse?

        Kommentar


        • #5
          Möchte es so einfach wie Möglich halten. Für Leien ist es glaube ich einfacher ein einfaches Array in einer Konfigurationsdatei anzupassen wie in einer Klasse rumzuschreiben.

          Aber kann ja auch sein das ich mich täusche.
          - Laravel

          Kommentar


          • #6
            Hast du dir mein Beispiel überhaupt angeschaut?

            Die Config-Klasse dort dient nur zum Auswerten und Zwischenhalten dieses Arrays:

            config_file.php:
            PHP-Code:
            return array(
                
            'einstellung1' => 'Foo',
                
            'einstellung2' => 'Bar',
            ); 
            Und sie ist super simpel aufgebaut. Wenn du lernen möchtest mit Klassen zu arbeiten, sieh sie als Lernmaterial an.

            Kommentar


            • #7
              Ja ich hab das was du geschrieben hast schon gelesen Nur hab ich es beim erstenmal irgendwie nicht ganz verstanden, beim zweiten mal allerdings schon.

              Und ich bin durch aus in der Lage mit Klassen zu arbeiten, ich bin kein Anfänger mehr

              Hab dank. Wie gesagt beim zweiten Mal lesen ist das auch die Lösung die ich gesucht habe. Danke
              - Laravel

              Kommentar


              • #8
                Zitat von tera3yte Beitrag anzeigen
                Und ich bin durch aus in der Lage mit Klassen zu arbeiten, ich bin kein Anfänger mehr
                Ich wasche meine Hände in Unschuld - schau mal links unter deinem Namen, dort steht "PHP-Kenntnisse: Anfänger". Du kannst das in deinen Profileinstellungen ändern.

                Kommentar


                • #9
                  Um mal eine weitere Idee ein zuwerfen vllt. daran gedacht es mit INI dateien zu probieren? Und die Datei dann einfach in ein Array parsen zu lassen?

                  Kommentar


                  • #10
                    In einer klassischen INI-Datei kann man nur Konstanten speichern. Eine PHP-Konfigurationsdatei wird ausgeführt und ist daher mächtiger. Das wird hier erklärt - zwar mit YAML statt INI aber das Prinzip trifft dennoch zu: https://github.com/mnapoli/PHP-DI/bl...definitions.md

                    Kommentar


                    • #11
                      Zitat von monolith Beitrag anzeigen
                      Ich wasche meine Hände in Unschuld - schau mal links unter deinem Namen, dort steht "PHP-Kenntnisse: Anfänger". Du kannst das in deinen Profileinstellungen ändern.
                      Ich weiß, nur wird man hier schnell angemeckert wenn die PHP-Kenntnisse auf Fortgeschritten stehen hat und dann Fragen stellt die man als Anfänger vielleicht schon wissen sollte.
                      - Laravel

                      Kommentar


                      • #12
                        Hallöchen,

                        also für statischen Kram den der Endanwender ändern soll, nutze ich immer eine JSON-Datei. Warum? Ist schnell erstellt, saubere Datenstruktur, schnell eingelesen und wirkt ziemlich verständlich. Beispiel:
                        PHP-Code:
                        {
                            
                        "db":{
                                
                        "host""127.0.0.1",
                                
                        "driver""pdo_mysql",
                                
                        "username""foobar",
                                
                        "password""verysecret"
                            
                        }

                        PHP-Code:
                        $config json_decode(file_get_contents(__DIR__ '/config.json'));
                        print_r($config); 
                        Alles was primär für Entwickler relevant ist (Routes, Dependencies, usw.) lasse ich über eine separate config.php laufen. Generell halte ich mich dabei aber weitestgehend an KISS. Eine Klasse wäre mir da schon zu viel des guten, aber je nach Anforderungsprofil hat auch die sicherlich ihre Daseinsberechtigung.

                        Viele Grüße,
                        lotti

                        Kommentar


                        • #13
                          Danke für den Tipp, ich schau mal was sich für mein Projekt besser anbietet.
                          - Laravel

                          Kommentar


                          • #14
                            Grundsätzlich sind Globale Arrays ( also Globale Variablen ) auf die Irgendwelche Functions oder Klassen "magisch" ( ohne übergabe des Arrays an den Constructor oder einen Setter ) zugreifen worst practice. Etwas das du nicht einer Klasse bekannt machst ( durch Dependency Injection ) erschwert die Wartung wenn diese Klasse die Aufgabe angedacht bekommt sich diese Werte sonstwo her zu holen. Was schlussendlich dem Single Responsibility prinzip widerspricht.

                            OOP ist kein Hexenwerk, aber wie jedes Konzept und jede Form von Strukturierungswerkzeug benötigt es (etwas / etwas mehr ) Einarbeitung, die man ruhig auch Einsteigern / Anfängern zumuten sollte.

                            Wissen:
                            http://de.wikipedia.org/wiki/Single-...bility-Prinzip
                            http://de.wikipedia.org/wiki/Clean_Code
                            http://de.wikipedia.org/wiki/Dependency_Injection
                            http://de.wikipedia.org/wiki/Container_(Informatik)

                            Native PHP Komponenten / Interfaces:
                            http://php.net/manual/de/class.arrayobject.php
                            http://php.net/manual/de/class.arrayaccess.php

                            (Pseudo-)Standards:
                            https://github.com/container-interop/container-interop

                            Komponenten:
                            http://php-di.org/
                            http://pimple.sensiolabs.org/
                            https://github.com/auraphp/Aura.Di
                            https://github.com/illuminate/container ( http://laravel.com/docs/4.2/ioc )
                            https://github.com/illuminate/config ( http://laravel.com/docs/4.2/configuration )
                            http://symfony.com/doc/current/compo...fig/index.html
                            [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                            Kommentar


                            • #15
                              Mensch, lass dieses pimple endlich weg
                              Standards - Best Practices - AwesomePHP - Guideline für WebApps

                              Kommentar

                              Lädt...
                              X