web-dev-qa-db-fra.com

Comment utiliser google-api-php-client sur laravel 5.6 quand il n'y a pas d'espace de nom

Désolé si cela se répète, mais les quelques questions précises que j'ai trouvées ne fonctionnent pas pour moi. Je suis un novice Laravel. J'essaie d'utiliser la bibliothèque github https://github.com/google/google-api-php-client avec le framework laravel 5.6. 

J'ai installé l'api en lançant:

composer besoin de Google/Apiclient: ^ 2.0

Mon composer.json semble correct car il comprend:

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

J'ai lancé la mise à jour du compositeur. Je peux voir le dossier Google dans le dossier de mon fournisseur.

Le fichier Lisez-moi de github pour cela indique ensuite d'ajouter l'autoloader include. Cependant, ce n'est pas ainsi que nous procédons pour Laravel de ma compréhension. J'ai constaté que la classe Google_Client n'a pas d'espace de nom, donc je ne sais pas comment l'ajouter correctement au fichier app.php. Ou de l'utiliser dans le contrôleur que je veux. Lorsque j'essaie de créer un nouveau Google_Client dans le contrôleur, il indique qu'il est introuvable. Si j'essaie de "l'utiliser", je ne sais pas quel chemin lui donner sans l'espace de noms présent.

Modification pour ajouter plus d'informations pour certains des commentaires ci-dessous:

Je lance compositeur require google/apiclient: ^ 2.0

Le résultat:

vagrant@Homestead:~/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.

Ce n’est pas l’un des paquets qu’il a découvert - je pense que ce devrait être le cas. Mon fichier composer.json ressemble à:

{
"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

}

Quand je lance mon programme et que j'appelle sur le nouveau Google_Client, je vois

 enter image description here

Donc, il me manque quelque chose pour que l'autochargeur le découvre.
L'exécution de la commande 'composer dumpautoload' me donne:

vagrant@Homestead:~/code/sageAnalytics$ composer dumpautoload

Génération de fichiers à chargement automatique optimisés

Illuminate\Foundation\ComposerScripts :: postAutoloadDump @Php artisan package: discover Paquet découvert: fideloper/proxy Paquet découvert: laravel/scout Paquet découvert: laravel /tinker Package découvert: nunomaduro/collision Le manifeste du package a été généré avec succès.

Encore une fois, le paquet google/apiclient n'est pas mentionné. Comment puis-je le trouver? 

La réponse a été publiée dans les commentaires en haut de la première réponse possible de @Razor. J'avais un peu gâché le projet en jouant avec l'autoload dans composer.json. J'ai supprimé complètement le dossier Vendor et relancé l'installation du composeur. Tout fonctionne maintenant. 

Si une classe ne figure dans aucun espace de noms, vous pouvez faire référence à l'intérieur d'un espace de noms en le préfixant d'un \ en tête, comme dans $foo = new \Google_Client;.

Pendant ce temps, la chaîne que vous spécifiez dans une instruction use n'est pas un "chemin" en tant que tel, c'est simplement le "nom de classe complet", c'est-à-dire le nom de la classe avec son espace de nom inclus à l'avant. Donc, pour une classe dans aucun espace de noms, c'est juste le nom, use Google_Client;

7
IMSoP

Étant donné que vous travaillez à Laravel, il vous faut probablement un peu plus de travail manuel pour enregistrer les cours de l'API Google dans vos services. J'ai trouvé ceci https://github.com/pulkitjalan/google-apiclient , ce qui pourrait vous aider à trouver un peu plus de détails sur l'installation d'un package Google Api qui le gère spécifiquement destiné à Laravel. 

vérifier le fichier composer.json

et ajoutez "vendor/google/apiclient/src/Google" dans le tableau classmap s'il n'existe pas.

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

et lancez composer dump-autoload

Pas besoin d'instructions use ou require_once.

le tableau d'autoload dans composer.json prépare tous les fichiers pour vous.

0
tushar zore