2012-07-21 11 views
6

私はこの質問が既に尋ねられていることを知っていますが、プロセスの自動読み込みが作曲家に少し変わったようです。ライブラリをsilexに追加します

私はsilexプロジェクトにクラスライブラリを追加したいだけです。

だから私は、このファイルを作っ:ベンダー/作曲/ autoload_namespaces.phpで ベンダー\ libに\ picture.php

<?php 
namespace MyNamespace; 

class Picture 
{ 
    function testage() 
    { 
     echo 'hihaaa ça marche'; exit; 
    } 
} 

を、私は大きな配列に次の行を追加:

'MyNamespace' => $vendorDir . '/lib/', 

また、メインファイルには、

use MyNamespace\Picture as Picture; 

という名前が付けられています。

私は、このエラーが発生します
$app->register(new Picture()); 

Fatal error: Class 'MyNamespace\Picture' not found... 

私はちょうど(私が使用していないコマンドラインなしで、簡単に、私は任意のコントローラから使用できるクラスを追加する方法がわかりません作曲家、私はsilexを事前にダウンロードしました)、どんな考えですか?

答えて

12

コンポーザーを使用している場合は、ベンダーのディレクトリを変更しないでください。ファイルを追加しないでください。作者が生成したファイルは変更しないでください。

これらのクラスをsrcディレクトリに入れることをお勧めします。 @gunnxは、を実行するたびに自動的に再生成されるように、自動ロードをcomposer.jsonに設定する方法を示しています。

ファイルはsrc/MyNamespace/Picture.phpになります。 composer.jsonでの自動読み込み設定は次のようになります。

{ 
    "autoload": { 
     "psr-0": { "MyNamespace": "src/" } 
    } 
} 

実際の解決策は、前の2件の回答の組み合わせです。しかし、細部を正しく理解することが重要だと思います。

+1

彼の質問の終わりに、彼は明らかに彼は作曲家を使用していないと言います。 – Maerlyn

+0

Thx @igorw! "src /"を置くと、私にとってはうまくいった! =)(なぜだろうか) –

2

ピクチャクラスはvendor/lib/MyNamespace/Picture.phpです。フルネームスペースとケーシングに注意してください。

+0

ありがとう、あなたの答えは本当に助けています。私はServiceProviderInterfaceを実装してbootメソッドとregisterメソッドを追加しました。今はエラーがありません。 – Vilrouge

+0

私の答えがあなたの問題を解決したら、それを受け入れてください。 – Maerlyn

2

オートローダに独自のコードを追加するには、composer.json に次のコードを追加します。

{ 
"autoload": { 
    "psr-0": {"Acme": "src/"} 
} 
関連する問題