Laravel config Datei anlegen

Ich musste mal bei einer bestehenden Laravel Installation eine Paypal Integration bei einem Kunden vornehmen. Nebenbei bemerkt möchte ich das mal loswerden. Paypal hat eine schreckliche Dokumentation. Sie ist überhaupt nicht intuitiv. Aber das ist überhaupt ein anderes Thema.

Ich installierte im Projekt über den Composer die Paypal SDK:

composer require paypal/paypal-checkout-sdk 

Zusätzlich legte ich mir einen neuen Order Services unter app. Dort legte ich eine neue Datei names PaypalClient an. Diese beinhaltete die Logik um mit dem Paypal server in Kontakt zu treten um zum Beispiel eine Bestellung und deren Details sich ausgeben zu lassen. Das kann zum Beispiel und ist in meinem Fall auch so, wichtig um den Bestellvorgang in meiner Datenbank zu hinterlegen. Die PaypallClient Klasse benötigt dazu aber Credentials (Client_id, Secret). Diese kann man natürlich direkt aus der .env laden. Aber eleganter wäre es die aus einer eigens benannten config Datei zu holen. Die folgerichtig auch im config Ordner liegt. Wir legen also eine neue Datei unter config an. Und fügen folgenden Code dort ein:

<?php
/**
 * PayPal Setting & API Credentials
 */
return [
    'client_id' => env('PAYPAL_CLIENT_ID', ''),
    'secret' => env('PAYPAL_SECRET', ''),
];

Und in der env fügen diese zwei zeilen ein:

PAYPAL_CLIENT_ID=xxx
PAYPAL_SECRET=yyy

Und an dem Ort wo wir nun die Credentials benötigen – in meinem Fall nun in der PaypalClient Klasse – holen wir uns die Daten mit

$client_id = config('paypal.client_id');
$secret = config('paypal.secret');

Das wirkt jedenfalls aufgeräumter und hat Potenzial bei zukünftigen Herausforderungen mit dem Kunden flexibler zu arbeiten. Zum Beispiel könnt ihr ja in der paypal.php Config Datei einen automatischen switch zwischen Production und Development Umgebung vornehmen.

Problem mit dem Composer update/install und der PHP Version

Erst vor kurzem habe ich für eine Agentur eine Laravel Anwendung gebaut. Ich habe sie lokal entwickelt und nachdem sie fertig und getestet war dem Kunden vorgestellt. Da ich noch keine Servercredentials von der Agentur hatte, habe ich das Projekt in mein GitHub gelegt und auf meinen Server geclont und dort die Anwendung konfiguriert (Datenbank , Laravel Security Key und alles was mit der .env zu tun hat).

Dann composer install sowie artisan migrate durchlaufen lassen. Somit konnte ich der Agentur das Ergebnis zeigen und sie konnten testen. Das alles Remote von zu Hause.

Nachdem sie zufrieden waren, schickten sie mir ihre Server Zugangsdaten und ich machte das gleiche Prozedere wie auf meinem Server. Also über SSH auf den Server gelogt und los. Allerdings kam ich hier nur bis composer install. Denn der Composer meldete folgende Fehlermeldung:

Problem 1
    - Root composer.json requires php ^7.3 but your php version (7.2.34) does not satisfy that requirement.
  Problem 2
    - laravel/framework is locked to version v8.10.0 and an update of this package was not requested.
    - laravel/framework v8.10.0 requires php ^7.3 -> your php version (7.2.34) does not satisfy that requirement.
  Problem 3
    - mockery/mockery is locked to version 1.4.2 and an update of this package was not requested.
    - mockery/mockery 1.4.2 requires php ^7.3 || ^8.0 -> your php version (7.2.34) does not satisfy that requirement.
  Problem 4
    - nunomaduro/collision is locked to version v5.0.2 and an update of this package was not requested.
    - nunomaduro/collision v5.0.2 requires php ^7.3 -> your php version (7.2.34) does not satisfy that requirement.
  Problem 5
    - phpunit/php-code-coverage is locked to version 9.2.0 and an update of this package was not requested.
    - phpunit/php-code-coverage 9.2.0 requires php >=7.3 -> your php version (7.2.34) does not satisfy that requirement.
  Problem 6
    - phpunit/php-file-iterator is locked to version 3.0.5 and an update of this package was not requested.
    - phpunit/php-file-iterator 3.0.5 requires php >=7.3 -> your php version (7.2.34) does not satisfy that requirement.
  Problem 7
    - phpunit/php-invoker is locked to version 3.1.1 and an update of this package was not requested.
    - phpunit/php-invoker 3.1.1 requires php >=7.3 -> your php version (7.2.34) does not satisfy that requirement.
  Problem 8
    - phpunit/php-text-template is locked to version 2.0.3 and an update of this package was not requested.
    - phpunit/php-text-template 2.0.3 requires php >=7.3 -> your php version (7.2.34) does not satisfy that requirement.
  Problem 9
    - phpunit/php-timer is locked to version 5.0.2 and an update of this package was not requested.
    - phpunit/php-timer 5.0.2 requires php >=7.3 -> your php version (7.2.34) does not satisfy that requirement.
  Problem 10
    - phpunit/phpunit is locked to version 9.4.1 and an update of this package was not requested.
    - phpunit/phpunit 9.4.1 requires php >=7.3 -> your php version (7.2.34) does not satisfy that requirement.
  Problem 11
    - sebastian/cli-parser is locked to version 1.0.1 and an update of this package was not requested.
    - sebastian/cli-parser 1.0.1 requires php >=7.3 -> your php version (7.2.34) does not satisfy that requirement.
  Problem 12
- sebastian/code-
…

Auch ein composer update lief ins Leere.

Loading composer repositories with package information
Updating dependencies
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Root composer.json requires php ^7.3 but your php version (7.2.34) does not satisfy that requirement.
  Problem 2
    - laravel/framework[v8.12.0, ..., 8.x-dev] require php ^7.3|^8.0 -> your php version (7.2.34) does not satisfy that requirement.
    - laravel/framework[v8.0.0, ..., v8.11.2] require php ^7.3 -> your php version (7.2.34) does not satisfy that requirement.
- Root composer.json requires laravel/framework ^8.0 -> satisfiable by laravel/framework[v8.0.0, ..., 8.x-dev].

Die Fehlermeldung ist dahingehen komisch, da ich auf dem server php 7.3 installiert bekommen habe. Also php -v gibt php 7.3 an.

PHP 7.3.23 (cli) (built: Oct  2 2020 14:41:47) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.23, Copyright (c) 1998-2018 Zend Technologies
    with the ionCube PHP Loader (enabled) + Intrusion Protection from ioncube24.com (unconfigured) v10.3.4, Copyright (c) 2002-2019, by ionCube Ltd.
(10:20:50) [ve] 

Das bedeutet für mich, dass Composer davon ausgeht – warum auch immer – dass php 7.2 auf dem server installiert ist. Was ja auch richtig ist. Aber PHP hatte nachträglich einen Symlink auf die php7.3 gesetzt bekommen. Und das war sehr wahrscheinlich das Problem. Das erstemal wo composer lief, war standardmäßig noch php 7.2 aktiviert und wurde erst nachträglich auf php7.3 gesetzt. Composer merkte sich also die alte PHP Version. Also muss ich composer klar machen, vergiss die Alte und nimm die Neue 😉

Das macht man im nicht realen Leben über die Kommandozeile:

composer clear-cache
composer self-update
composer install --ignore-platform-reqs

Es lief durch und damit … Problem gelöst! Hoffe bei Euch auch?!

SeoTheater Autoren