4

私はこれをSOで見つけました:Symfony 2でPHPExcelを正しく使用する方法

これは機能しますが、composer で使用したいと考えています。私がすでに解決した最初の部分: 特別なタグ (最後の安定リリース) の PHPExcel をロードする

次の構文でタグを取得する方法がわかりません。

"repositories": [
    {
        "type": "vcs",
        "url": "https://github.com/umpirsky/SyliusAssortmentBundle"
    }
]

だから私はPackage表記法を使用します:
私は見つけました、それreferenceはgithubのタグ名でなければなりません。また、version同じ値にすることはできません (PHPExcel_1.7.8)。アルファベットは使用できないようで、数字としてのバージョンのみです(1.7.8)

"repositories": [{
    "type": "package",
    "package": {
        "name": "PHPOffice/PHPExcel",
        "version": "1.7.8",
        "source": {
            "url": "https://github.com/PHPOffice/PHPExcel.git",
            "type": "git",
            "reference": "PHPExcel_1.7.8"
        }
    }
}]

私が解決しなかった次のステップ。オートローディングのすべての組み合わせを試しました: psr-0、クラスマップ、プロジェクト/ベンダー/phpexcel に関連するさまざまなパス、毎回コンポーザーを更新しますが、何も機能しませんでした。

この行を入れた場合にのみ機能します

$loader->add('PHPExcel', __DIR__.'/../vendor/PHPOffice/PHPExcel/Classes');

app/autoload.php に追加します。PHPExcel最初の文字列 ( ) が空の文字列になることもあることがわかりました: ''
またはを使用すると違いはありますPHPExcel''?

私の主な質問は、どうすればこの行を autoload.php に書き込まずに、同等のコマンドをプロジェクトの composer.json に入れることができるでしょうか?

4

1 に答える 1

8

あなたの主な質問に関して、問題は、パッケージがインストールされると、定義を更新して自動ロードのものを追加しても、実行してcomposer updateも何も変わらないことです。Composer は、「キャッシュ」に既にインストールされている古いパッケージをまだ持っているため、それを使用して自動ロードを生成し、失敗します。

これを解決するには、vendor/PHPOffice/PHPExcel直接削除して run を実行する必要composer updateがあります。これにより、自動ロードなどを含む composer.json からの最新情報で再インストールされます。自動ロードを次のように指定する必要があります。

"repositories": [{
    "type": "package",
    "package": {
        "name": "PHPOffice/PHPExcel",
        "version": "1.8.0",
        "source": {
            "url": "https://github.com/PHPOffice/PHPExcel.git",
            "type": "git",
            "reference": "1.8.0"
        },
        "autoload": {
            "psr-0": {
                "PHPExcel": "Classes/"
            }
        }
    }
}],
"require": {
    "PHPOffice/PHPExcel": "1.8.*",
    ...

二次的な質問と''vsについて'PHPExcel':''は、このディレクトリに任意の名前空間があることを示しています。つまり、オートローダーは常にこのディレクトリをスキャンしてクラスを見つけます。これは便利ですが、名前空間をディレクトリに明示的にマッピングするよりも遅くなります。したがって、どちらも機能しますが、特に公開するパッケージでは、より具体的な形式が優先されます。

于 2013-04-24T16:23:35.093 に答える