web-dev-qa-db-de.com

Wie benutzt man den google-api-php-client auf laravel 5.6, wenn kein Namespace vorhanden ist

Entschuldigung, wenn dies eine Wiederholung ist, aber die wenigen engen Fragen, die ich gefunden habe, haben für mich nicht funktioniert. Ich bin ein Laravel Neuling. Ich versuche, die Bibliothek github https://github.com/google/google-api-php-client mit dem Framework Laravel 5.6 zu verwenden. 

Ich habe die API installiert, indem ich Folgendes ausgeführt habe:

komponist erfordert Google/Apiclient: ^ 2.0

Mein composer.json sieht korrekt aus, da es Folgendes enthält:

"require": {
    "php": "^7.1.3",
    "fideloper/proxy": "^4.0",
    "google/apiclient": "^2.2",
    "laravel/framework": "5.6.*",
    "laravel/tinker": "^1.0"
},

Ich habe Composer Update ausgeführt. Ich kann den Google-Ordner im Ordner meines Herstellers sehen.

Die github-Readme-Datei sagt dann, das Autoloader-Include hinzuzufügen. Dies ist jedoch nicht die Art und Weise, wie wir es aus meinem Verständnis für Laravel tun. Ich habe festgestellt, dass die Google_Client-Klasse über keinen Namespace verfügt. Daher weiß ich nicht, wie sie der app.php-Datei ordnungsgemäß hinzugefügt werden kann. Oder um es in der Steuerung zu verwenden, die ich möchte. Wenn ich versuche, einen neuen Google_Client im Controller zu erstellen, wird er nicht gefunden. Wenn ich versuche, es zu "verwenden", weiß ich nicht, welchen Pfad es ohne den vorhandenen Namespace geben soll.

Bearbeiten, um weitere Informationen für einige der folgenden Kommentare hinzuzufügen:

Ich führe 'composer benoetigt google/apiclient: ^ 2.0

Die Ausgabe:

[email protected]:~/code/sageAnalytics$ composer require google/apiclient:^2.0 ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 10 installs, 0 updates, 0 removals
  - Installing psr/http-message (1.0.1): Loading from cache
  - Installing guzzlehttp/psr7 (1.4.2): Loading from cache
  - Installing guzzlehttp/promises (v1.3.1): Loading from cache
  - Installing guzzlehttp/guzzle (6.3.2): Loading from cache
  - Installing phpseclib/phpseclib (2.0.10): Loading from cache
  - Installing firebase/php-jwt (v5.0.0): Loading from cache
  - Installing google/apiclient-services (v0.53): Loading from cache
  - Installing psr/cache (1.0.1): Loading from cache
  - Installing google/auth (v1.2.1): Loading from cache
  - Installing google/apiclient (v2.2.1): Loading from cache phpseclib/phpseclib suggests installing ext-libsodium (SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.) phpseclib/phpseclib suggests installing ext-mcrypt (Install the Mcrypt extension in order to speed up a few other cryptographic operations.) phpseclib/phpseclib suggests installing ext-gmp (Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.) google/apiclient suggests installing cache/filesystem-adapter (For caching certs and tokens (using Google_Client::setCache)) Writing lock file Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover Discovered Package: fideloper/proxy Discovered Package: laravel/scout Discovered Package: laravel/tinker Discovered Package: nunomaduro/collision Package manifest generated successfully.

Es ist nicht eines der Pakete, die es entdeckt hat - ich denke, es sollte sein. Meine composer.json-Datei sieht folgendermaßen aus:

{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"type": "project",
"require": {
    "php": "^7.1.3",
    "fideloper/proxy": "^4.0",
    "google/apiclient": "^2.0",
    "laravel/framework": "5.6.*",
    "laravel/tinker": "^1.0"
},
"require-dev": {
    "filp/whoops": "^2.0",
    "fzaninotto/faker": "^1.4",
    "mockery/mockery": "^1.0",
    "nunomaduro/collision": "^2.0",
    "phpunit/phpunit": "^7.0"
},
"autoload": {
    "classmap": [
        "database/seeds",
        "database/factories"
    ],
    "psr-4": {
        "App\\": "app/"
    }
},
"autoload-dev": {
    "psr-4": {
        "Tests\\": "tests/"
    }
},
"extra": {
    "laravel": {
        "dont-discover": [
        ]
    }
},
"scripts": {
    "post-root-package-install": [
        "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
    ],
    "post-create-project-cmd": [
        "@php artisan key:generate"
    ],
    "post-autoload-dump": [
        "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
        "@php artisan package:discover"
    ]
},
"config": {
    "preferred-install": "dist",
    "sort-packages": true,
    "optimize-autoloader": true
},
"minimum-stability": "dev",
"prefer-stable": true

}

Wenn ich mein Programm starte und neuen Google_Client anrufe, sehe ich

 enter image description here

Also vermisse ich etwas, damit es vom Autoloader entdeckt wird.
Das Ausführen des Befehls 'composer dumpautoload' gibt mir Folgendes:

[email protected]:~/code/sageAnalytics$ composer dumpautoload

Optimierte Autoload-Dateien erzeugen

Illuminate\Foundation\ComposerScripts :: postAutoloadDump @Php Handwerkerpaket: discover Entdecktes Paket: fideloper/proxy Entdecktes Paket: laravel/scout Entdecktes Paket: laravel /tinker Entdecktes Paket: nunomaduro/collision Paketmanifest wurde erfolgreich generiert.

Daher wird auch hier das Paket google/apiclient nicht erwähnt. Wie kann ich es finden lassen? 

Die Antwort wurde in den Kommentaren oben für die erste mögliche Antwort von @Razor veröffentlicht. Ich hatte das Projekt in gewisser Weise durcheinander gebracht, wahrscheinlich durch das automatische Laden in composer.json. Ich habe den Vendor-Ordner vollständig gelöscht und die Composer-Installation erneut ausgeführt. Alles funktioniert jetzt. 

Wenn sich eine Klasse in keinem Namespace befindet, können Sie von einem Namespace aus referenzieren, indem Sie einen führenden \ voranstellen, wie in $foo = new \Google_Client;.

In der Zwischenzeit ist die Zeichenfolge, die Sie in einer use-Anweisung angeben, kein "Pfad", sondern lediglich der "vollständig qualifizierte Klassenname", dh der Klassenname mit dem auf der Vorderseite enthaltenen Namespace. Für eine Klasse in keinem Namespace ist dies nur der Name use Google_Client;

7
IMSoP

Da Sie in Laravel arbeiten, ist wahrscheinlich ein bisschen mehr Handarbeit erforderlich, um die Google-API-Klassen in Ihren Diensten zu registrieren. Ich habe dieses https://github.com/pulkitjalan/google-apiclient gefunden, das Ihnen helfen könnte, ein bisschen mehr Details bei der Installation eines Google-API-Pakets zu finden, das es speziell auf Laravel abzielt. 

Überprüfen Sie die Datei composer.json

und fügen Sie "Hersteller/google/apiclient/src/Google" im classmap-Array hinzu, falls nicht vorhanden.

"autoload": {
        "classmap": [
            "vendor/google/apiclient/src/Google"
        ]
}

und composer dump-autoload ausführen

Keine use- oder require_once-Anweisung erforderlich.

das autoload-Array in composer.json stellt alle Dateien für Sie bereit.

0
tushar zore