composerパッケージの作り方を学んでいます。これまでのところ、私はこれを行ってきました:
composer.json
{
"name": "Iv/MyPackage",
"autoload": {
"psr-4": {
"Iv\\MyPackage\\": "src/"
}
},
"require": {
"guzzlehttp/guzzle": "~6.0"
},
"require-dev": {
"phpunit/phpunit": "4.*",
"guzzlehttp/guzzle": "~6.0"
},
"autoload-dev": {
"psr-4": {
"Iv\\MyPackage\\Tests\\": "tests/"
}
}
}
そして、私は名前空間の下にクラスを持っています:namespace Iv\MyPackage\Api;
と呼ばConsumer
れ、その__construct
メソッドにはこれがあります:
public function __construct(array $credentials)
{
$this->client = new Client();
$this->credentials = $credentials;
}
そして、そのクラスの一番上にuse GuzzleHttp\Client;
.
私が得ているエラーは次のとおり
Fatal error: Class 'GuzzleHttp\Client' not found in path\to\package\Iv\MyPackage\src\Api\Consumer.php on line 27
です。
$package = new Iv\MyPackage\Api\Consumer(['user', 'password']);
$query = $api->prepare('/api-endpoint', 'GET');
編集:
これは私のConsumer
クラスがどのように見えるかです:
<?php
namespace Iv\MyPackage\Api;
use GuzzleHttp\Client;
class Consumer
{
private $credentials = [];
public function __construct(array $credentials)
{
$this->client = new Client();
$this->credentials = $credentials;
}
...
}
また、PhpStorm を使用しています。これは、+を入力して押すとGuzzleHttp
パッケージが自動インポートされるため、パッケージがあることを示しています。つまり、私は走った。Client()
ALTENTERcomposer install/update
編集2:ファイルがあります-index.php
次のものがあります:
<?php
include('vendor/autoload.php');
$api = new Iv\MyPackage\Api\Consumer(['user', 'password']);
$query = $api->prepare('/endpoint', 'GET');
var_dump($api->execute($query));
フォルダ構造は次のとおりです。
-Iv/
--MyPackage/
---src/
----Api/
----Exceptions/
----vendor/
----tests/
----otherfiles (composer.json, phpunit.xml, etc)
-vendor/
-composer.json
-index.php (I mentioned above)
編集 3 : my の内容vendor/composer/autoload_psr4.php
:
<?php
// autoload_psr4.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'Symfony\\Component\\Yaml\\' => array($vendorDir . '/symfony/yaml'),
'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src'),
'Iv\\MyPackage\\Tests\\' => array($baseDir . '/tests'),
'Iv\\MyPackage\\' => array($baseDir . '/src'),
'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'),
'GuzzleHttp\\Promise\\' => array($vendorDir . '/guzzlehttp/promises/src'),
'GuzzleHttp\\' => array($vendorDir . '/guzzlehttp/guzzle/src'),
'Doctrine\\Instantiator\\' => array($vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator'),
);
編集4:
index.php
この作曲家がいるフォルダーには:
{
"name": "Test MyPackage",
"autoload": {
"psr-4": {"Iv\\MyPackage\\": "Iv/MyPackage/src"}
}
}
^^ SO のトピックで、OP がパッケージを packagist/git にアップロードする前にパッケージをテストする方法を尋ねているのを見ました。クラスをロードできますが、Consumer
エラーはありませんが、すべての依存関係が見つかりません。( GuzzleHttp\Client
、Symfony\Component\Yaml\Parser
、など)