没有命名空间时,如何在 laravel 5.6 上使用 google-api-php-client
How to use google-api-php-client on laravel 5.6 when there is no namespace
抱歉,如果这是重复的,但我发现的几个关闭问题对我没有用。我是 Laravel 新手。我正在尝试将 github 库 https://github.com/google/google-api-php-client 与 laravel 5.6 框架一起使用。
我通过 运行ning 安装了 api:
作曲家要求 google/apiclient:^2.0
我的 composer.json 看起来是正确的,因为它包括:
"require": {
"php": "^7.1.3",
"fideloper/proxy": "^4.0",
"google/apiclient": "^2.2",
"laravel/framework": "5.6.*",
"laravel/tinker": "^1.0"
},
我有 运行 作曲家更新。我可以在供应商的文件夹中看到 Google 文件夹。
github 自述文件然后说要添加自动加载器包含。但是,根据我的理解,这不是我们为 Laravel 做的方式。我发现 Google_Client class 没有名称空间,所以我不知道如何将它正确添加到 app.php 文件中。或者在我想要的控制器中使用它。当我尝试在控制器中创建一个新的 Google_Client 时,它说找不到。如果我尝试 'use' 它,我不知道在没有命名空间的情况下给它什么路径。
正在编辑以添加以下评论的更多信息:
I 运行 '作曲家要求google/apiclient:^2.0
输出:
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.
它不是它发现的包之一 - 我认为它应该是。我的 composer.json 文件如下所示:
{
"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
}
当我 运行 我的程序并调用新的 Google_Client 我看到
所以我在让自动加载器发现它的过程中遗漏了一些东西。
运行 命令 'composer dumpautoload' 给我:
vagrant@homestead:~/code/sageAnalytics$ composer dumpautoload
生成优化的自动加载文件
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.
所以再次没有提到包 google/apiclient。我怎样才能找到它?
如果 class 不在任何命名空间中,您可以通过在命名空间中添加前缀 \
来从命名空间内部进行引用,如 $foo = new \Google_Client;
同时,您在 use
语句中指定的字符串本身并不是 "path",它只是 "fully-qualified class name",即 class 名称其名称空间包含在前面。所以对于没有命名空间的 class,它只是名称,use Google_Client;
由于您在 Laravel 工作,可能需要一些额外的手工操作才能在您的服务中注册 google api 类。我发现了这个 https://github.com/pulkitjalan/google-apiclient,它可能会帮助您找到更多关于安装 google api 软件包的详细信息,该软件包专门针对 laravel 进行管理。
@Razor 的第一个可能答案已发布在顶部的评论中。我以某种方式搞砸了这个项目,很可能是因为弄乱了 composer.json 中的自动加载。我完全删除了 Vendor 文件夹并 re-ran 作曲家安装。现在一切正常。
检查文件composer.json
如果类映射数组不存在,则添加 "vendor/google/apiclient/src/Google"。
"autoload": {
"classmap": [
"vendor/google/apiclient/src/Google"
]
}
和运行composer dump-autoload
不需要 use
或 require_once
语句。
composer.json中的自动加载数组为您准备好所有文件。
抱歉,如果这是重复的,但我发现的几个关闭问题对我没有用。我是 Laravel 新手。我正在尝试将 github 库 https://github.com/google/google-api-php-client 与 laravel 5.6 框架一起使用。
我通过 运行ning 安装了 api:
作曲家要求 google/apiclient:^2.0
我的 composer.json 看起来是正确的,因为它包括:
"require": {
"php": "^7.1.3",
"fideloper/proxy": "^4.0",
"google/apiclient": "^2.2",
"laravel/framework": "5.6.*",
"laravel/tinker": "^1.0"
},
我有 运行 作曲家更新。我可以在供应商的文件夹中看到 Google 文件夹。
github 自述文件然后说要添加自动加载器包含。但是,根据我的理解,这不是我们为 Laravel 做的方式。我发现 Google_Client class 没有名称空间,所以我不知道如何将它正确添加到 app.php 文件中。或者在我想要的控制器中使用它。当我尝试在控制器中创建一个新的 Google_Client 时,它说找不到。如果我尝试 'use' 它,我不知道在没有命名空间的情况下给它什么路径。
正在编辑以添加以下评论的更多信息:
I 运行 '作曲家要求google/apiclient:^2.0
输出:
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.
它不是它发现的包之一 - 我认为它应该是。我的 composer.json 文件如下所示:
{
"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
}
当我 运行 我的程序并调用新的 Google_Client 我看到
所以我在让自动加载器发现它的过程中遗漏了一些东西。
运行 命令 'composer dumpautoload' 给我:
vagrant@homestead:~/code/sageAnalytics$ composer dumpautoload
生成优化的自动加载文件
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.
所以再次没有提到包 google/apiclient。我怎样才能找到它?
如果 class 不在任何命名空间中,您可以通过在命名空间中添加前缀 \
来从命名空间内部进行引用,如 $foo = new \Google_Client;
同时,您在 use
语句中指定的字符串本身并不是 "path",它只是 "fully-qualified class name",即 class 名称其名称空间包含在前面。所以对于没有命名空间的 class,它只是名称,use Google_Client;
由于您在 Laravel 工作,可能需要一些额外的手工操作才能在您的服务中注册 google api 类。我发现了这个 https://github.com/pulkitjalan/google-apiclient,它可能会帮助您找到更多关于安装 google api 软件包的详细信息,该软件包专门针对 laravel 进行管理。
@Razor 的第一个可能答案已发布在顶部的评论中。我以某种方式搞砸了这个项目,很可能是因为弄乱了 composer.json 中的自动加载。我完全删除了 Vendor 文件夹并 re-ran 作曲家安装。现在一切正常。
检查文件composer.json
如果类映射数组不存在,则添加 "vendor/google/apiclient/src/Google"。
"autoload": {
"classmap": [
"vendor/google/apiclient/src/Google"
]
}
和运行composer dump-autoload
不需要 use
或 require_once
语句。
composer.json中的自动加载数组为您准备好所有文件。