Bernd: vendor/autoload.php

Hallo,

wenn ich mir die Timeular (ZEIº) Client Library for PHP Beispiele ansehe, sehe ich folgendes:

require_once __DIR__ . '/../vendor/autoload.php';

https://github.com/linkorb/timeular-client-php/blob/master/example/common.php

Dieser Ordner gibt es nicht, wenn ich mir das ganze Projekt auf den Rechner lade. Die Frage ist, woher bekomme ich diesen?

  1. Tach!

    Dieser Ordner gibt es nicht, wenn ich mir das ganze Projekt auf den Rechner lade. Die Frage ist, woher bekomme ich diesen?

    Wenn du das mit dem Composer installierst, bekommst du den. Das steht jedoch nicht in der Projektdokumentation auf Github, man kann es nur anhand des Indiz composer.json erkennen.

    dedlfix.

    1. Misst :/ Anders kommt man nicht an die Datei? Ich kenne mich mit dem Teil nicht aus und möchte es auch ungern auf meinem Mac installieren.

      EDIT: Ist das dieser?
      https://github.com/squizlabs/PHP_CodeSniffer/blob/master/autoload.php

      1. Tach!

        Misst :/ Anders kommt man nicht an die Datei? Ich kenne mich mit dem Teil nicht aus und möchte es auch ungern auf meinem Mac installieren.

        Doch, du musst das nur genauso installieren, wie es der Composer tun würde. Es kommt nicht darauf an, diese Datei zu bekommen, denn die gibt es nicht einfach so. Die wird vom Composer erstellt, nachdem der alle Abhängigkeiten installiert hat. In ihr steht Code drin, wo die Dateien für include/require der einzelnen Pakete zu finden sind, grob gesagt.

        dedlfix.

        1. Danke für deine Erklärung. Dann kommt das für mich leider nicht in Frage. Ich kenne das Tool nicht und möchte es nicht einfach so auf meinem Mac installieren.

          Muss ich eben weiter schauen ob ich noch etwas anderes ohne der Datei finde.

      2. Misst :/ Anders kommt man nicht an die Datei? Ich kenne mich mit dem Teil nicht aus und möchte es auch ungern auf meinem Mac installieren.

        Composer ist eines der wichtigsten Werkzeuge eines PHP-Entwicklers. Früher oder später solltest du dich damit befassen. Composer braucht auch keine komplizierte Installation, es reicht im Prinzip die composer.phar-Datei herunterzuladen.

        EDIT: Ist das dieser?
        https://github.com/squizlabs/PHP_CodeSniffer/blob/master/autoload.php

        Nein.

        1. Hallo,

          warum kann man nicht einfach einen kompletten Download zur verfügung stellen? Früher ging das doch auch? Und muss ich auf dem Server auch etwas beachten wenn ich mit vendor/autoload.php arbeiten möchte? Ich habe nur ein Webspace und kein SSH Zugang.

          1. Tach!

            warum kann man nicht einfach einen kompletten Download zur verfügung stellen?

            Kann man. Aber oft sind Abhängigkeiten zu installieren, und je mehr das sind, destoweniger möchtest du das zu Fuß tun. Besonders nicht, wenn jeder sein eigenes Süppchen kocht. Composer hat hier zu Vereinheitlichung geführt und für Vereinfachung gesorgt.

            Und muss ich auf dem Server auch etwas beachten wenn ich mit vendor/autoload.php arbeiten möchte? Ich habe nur ein Webspace und kein SSH Zugang.

            Dann musst du das lokal installieren und alle Dateien hochladen. Das ist sowieso der übliche Weg. DU brauchst das ja auch alles lokal in deiner Entwicklungsumgebung.

            dedlfix.

            1. Ich wusste es, dass es nicht funktioniert. Jetzt habe ich vielleicht mein System versaut wegen so einem Dreck :/

              Mein erster Weg war diese Seite aufrufen:
              https://getcomposer.org/download/

              Dann diese Befehle ausführen, die gezeigt werden, hat auch geklappt. Danach bin ich auf
              https://getcomposer.org/doc/00-intro.md gegangen und dort unter

              Installation - Linux / Unix / macOS#

              habe zuerst dieses Verzeichnis angelegt, da es bei mir noch nicht vorhanden war

              mkdir -p /usr/local/bin

              Danach folgenden Befehl ausgeführt

              sudo mv composer.phar /usr/local/bin/composer

              Laut Beschreibung kann ich dann in der Konsole

              php composer.phar

              aufrufen. Danach erhalte ich folgende Fehlermeldung

              Could not open input file: composer.phar

              Ich habe mir dazu folgendes Video angesehen, alles ganz einfach nur bei mir nicht
              https://www.youtube.com/watch?v=yHPwCZAaMak

              Jetzt kann ich wohl mein ganzen Mac neu machen weil irgendetwas passiert ist wo ich nicht weiß was los ist :/

              1. Danach folgenden Befehl ausgeführt

                sudo mv composer.phar /usr/local/bin/composer

                Laut Beschreibung kann ich dann in der Konsole

                php composer.phar

                So müsstest du Composer aufrufen, wenn du es lokal installiert hättest. Du hast aber die globale Variante gewählt, deswegen sollte der aufruf einfach nur composer lauten. Zum Testen führ mal composer --version aus.

                1. Oh danke für die Aufklärung. Ich bin einfach nicht bei der Sache :/ In Minute 7:18 sagt er es ja, dass man jetzt wenn man dieses Befehl ausgeführt hat einfach nur noch composer -v ausführen kann.

                  Wenn ich composer --version aufrufe erhalte ich

                  Composer version 1.8.5 2019-04-09 17:46:47

                  Sollte also passen?

                  Jetzt muss ich mir erst einmal MAMP installieren dass ich mir Timeular (ZEIº) Client Library for PHP herunterladen kann.

                2. Tach!

                  So müsstest du Composer aufrufen, wenn du es lokal installiert hättest. Du hast aber die globale Variante gewählt, deswegen sollte der aufruf einfach nur composer lauten. Zum Testen führ mal composer --version aus.

                  Gilt die globale Installation lediglich für den Composer selbst oder legt der nun auch noch Dinge global ab, die im Projekt (und damit auch später auf dem Server) gebraucht werden?

                  dedlfix.

                  1. Gilt die globale Installation lediglich für den Composer selbst oder legt der nun auch noch Dinge global ab, die im Projekt (und damit auch später auf dem Server) gebraucht werden?

                    Nur für Composer. Dependencies werden weiterhin im vendor-Ordner abgelegt.

  2. wenn ich mir die Timeular (ZEIº) Client Library for PHP Beispiele ansehe, sehe ich folgendes:

    require_once __DIR__ . '/../vendor/autoload.php';
    

    Das ist eine Datei, die von Composer generiert wird.

    Dieser Ordner gibt es nicht, wenn ich mir das ganze Projekt auf den Rechner lade. Die Frage ist, woher bekomme ich diesen?

    composer create-project linkorb/timeular-client
    
    1. Hallo,

      composer create-project linkorb/timeular-client
      

      danke für den Befehlt, wie bist du an diesen gekommen? Ich habe ihn leicht abgeändert

      composer create-project linkorb/timeular-client Timeular-API
      

      Die Frage ist jetzt noch, benötige ich alle Dateien die heruntergeladen wurden? In vendor gibt es Ordner wie

      • Composer
      • PSR
      • Symfony
      • guzzlehttp

      Und eben auch meine autoload.php die ich eigentlich benötigt habe. Warum sind jetzt plötzlich viel mehr Dateien vorhanden?

      1. Tach!

        Die Frage ist jetzt noch, benötige ich alle Dateien die heruntergeladen wurden? In vendor gibt es Ordner wie

        • Composer
        • PSR
        • Symfony
        • guzzlehttp

        Wie gesagt, das sind Abhängigkeiten. Man schreibt heutzutage nicht mehr alles von Grund auf selbst, sondern bedient sich an anderen Projekten für die Teile der Aufgabe, die andere bereits gelöst haben. Also, nachdem man geschaut hat, ob die Lizenzbedingungen zum eigenen Projekt passen.

        Ob wirklich alles von allem benötigt wird, kann man vermutlich guten Gewissens verneinen. Aber um das am Ende wegzulassen, man müsste alles durchgehen und die Teile der eingebundenen Bibliotheken finden, die letztlich nicht angesprochen werden. Andererseits organisiert man bestenfalls seinen Code so, dass nicht zu viel Aufgaben in einer Klasse/Datei abgehandelt werden. Dann wird zur Laufzeit auch nur das geladen, was wirklich benötigt wird. Der Autoloader ist dafür ein wichtiger Bestandteil. Man gibt nicht händisch jede Include-Datei an, sondern überlässt das Laden der Dateien mit den Klassen darin dem Autoload-Mechanismus von PHP. Der wiederum bekommt über die vom Composer erzeugte autoload.php gesagt, wo die konreten Dateien für die Klassen zu finden sind.

        dedlfix.

  3. Hallo,

    jetzt bekomme ich folgenden Fehler

    Fatal error: Uncaught Symfony\Component\Dotenv\Exception\PathException: Unable to read the

    /Timeular-API/example/get-time-entries.php(3): require_once('/www/htdocs/w01...') #3 {main} thrown in /www/htdocs/Timeular-API/vendor/symfony/dotenv/Dotenv.php on line 465

    1. Ok, am Mac werden Dateien ausgeblendet. Ich musste erst alle über

      defaults write com.apple.finder AppleShowAllFiles 1 .
      killall Finder

      alle einblenden und die dann auch mit hochladen.

      Jetzt bekomme ich noch diesen Fehler

      Fatal error: Uncaught RuntimeException: Key or secret not specified in Timeular-API/example/common.php:15 Stack trace: #0 /www/htdocs/Timeular-API/example/get-time-entries.php(3): require_once() #1 {main} thrown in /www/htdocs/Timeular-API/example/common.php on line 15

      1. Ok, aus

        $secret = getenv('xxxxx');
        

        Musste ich

        $secret ='xxxx';
        

        machen. Keine Ahnung was getenv macht.

        1. Hallo Bernd,

          Keine Ahnung was getenv macht.

          get environment

          Bis demnächst
          Matthias

          --
          Pantoffeltierchen haben keine Hobbys.
          ¯\_(ツ)_/¯
  4. Hallo,

    was ich nicht verstehe ist folgendes

    require_once 'common.php';
    
    $startedBefore = urlencode(date("Y-m-d\TH:i:s.000", time() ));
    $stoppedAfter = urlencode(date("Y-m-d\TH:i:s.000", time() - (60*60*24) ));
    
    $res = $client->get('time-entries/' . $stoppedAfter . '/' . $startedBefore);
    
    print_r($res);
    

    Ich möchte gerne ein anderes Datum übertragen, sagen wir den Tag von gestern. Wenn ich bei startedBefore 2019-05-26 eintrage, erhalte ich keine Ausgabe mehr. Wie muss ich das Datum eintragen oder kann ich dieses so nicht händisch hinterlegen?

    1. Tach!

      Ich möchte gerne ein anderes Datum übertragen, sagen wir den Tag von gestern.

      Nicht alle Tage sind 60*60*24 lang. Solche Rechnungen sollte man gar nicht erst anfangen. Besser strtotime() nehmen, dann steht auch in lesbarer Form (wenn auch auf Englisch), was man zu rechnen gedenkt.

      Wenn ich bei startedBefore 2019-05-26 eintrage, erhalte ich keine Ausgabe mehr. Wie muss ich das Datum eintragen oder kann ich dieses so nicht händisch hinterlegen?

      Vielleicht hat das angegebene Format ja einen Sinn und du solltest das genauso übergeben. Jedenfalls gibt strtotime('yesterday') einen passenden Timestamp für date() anstelle von time() plus Rechnerei.

      dedlfix.