2016-05-27 13 views
3

私のLaravelプロジェクトでこのパッケージhttps://github.com/FineUploader/php-traditional-server/を使用します。だから私はそのようなcomposer.jsonファイル修正:Laravelでベンダークラスを使用するには?

"require": { 
    "php": ">=5.5.9", 
    "laravel/framework": "5.2.*", 
    "fineuploader/php-traditional-server": "1.0.0" 
} 

をそしてコンupdateコマンドを実行します。しかし、どうすればコントローラのUploadHandlerクラス(パッケージのhandler.phpで宣言されたクラス)を使用できますか?

答えて

2

@scipilotの答えは、あまりにも動作するはずですが、私は自分自身の選択与える:

あなたcomposer.jsonファイルにこの部分を追加し、composer updateを実行します。

"files": [ 
    "vendor/fineuploader/php-traditional-server/handler.php" 
] 

これ以降、プロジェクトスコープでクラスが表示され、スクリプトが機能します。ここでは作曲家でオートローディングファイルについて


より:https://getcomposer.org/doc/04-schema.md#files

+0

'$ u = new UploadHandler();を呼び出すと' Class 'MyApp \ Http \ Controllers \ UploadHandler'が見つかりませんでした。 – hienbt88

+1

@ hienbt88 'UploadHandler'の前にバックスラッシュを追加します。同様に '$ u = new \ UploadHandler();' –

+0

ありがとう、それは働いた – hienbt88

0

UploadHandlerを直接お試しになりましたか?名前空間を使用していないか、または他の多く作曲の自動ロードは、あなたができるよう、あなたのための魔法の提供のいずれかのクラスファイルを含めることができ
Composerはオートローディング機能を持っているので、フライ

+0

私が試したし、それが目に見えることはできません。 – hienbt88

+0

これは、FineUploaderパッケージが独自のcomposer.jsonで正しく宣言されている場合にのみ機能します。残念ながら、彼らは持っていないので、呼び出し側のアプリケーションは、特にリソースをターゲットにする必要があります。あなたは正しいオートロード仕様でプルリクエストを提出できますか? – scipilot

6

パッケージにあなたの「依存関係」を拾うことができます自分:

include "vendor/FineUploader/php-traditional-server/handler.php";

か、Laravelで作曲オートローダを使用しているとして、あなたはクラスマップを定義する必要があります。あなたの作曲のJSONで

{ 
    "autoload": { 
     "classmap": ["vendor/FineUploader/php-traditional-server"] 
    } 
} 

その後composer dump-autoload (含む "ベンダー/ autoload.php" すでにLaravelブートによって提供される)を実行します。

ライブラリ内のすべてのクラスは、コードで要求された時点で自動的にロードされます。

更新:なぜクラスマップが最適な方法ですか。

オートローディングは、それが唯一の解析されているので、クラスが実際に必要とされるときにメモリにロードされ、コンパイルされ、クラスをロードするための最も効率的かつパフォーマンスの方法です。 「クラスマップ」自動ロードは、名前空間にないか、PSR0または4形式でないクラスをロードするための、意図されたメカニズムです。

逆に、グローバル(アプリ起動)を使用して、それは、すべてのアプリケーションが要求すべての依存関係ためをロードして、最も効率が悪い作曲オートローダーの「ファイル」オプションを使用して、同様のクラスに設定された、または含まれ、それらが使用されるかどうかにかかわらず。実際、クラスの依存関係に自動ロード "ファイル"を使用することは、それぞれのスクリプトに特定のインクルードを持つ従来のアプローチよりも悪いです。少なくとも、特定の要件をあらかじめロードするだけなので、メモリ使用量の自動ロードに似ています。

自動ロードオプションは、関数呼び出しのための自動ロードメカニズムが存在しないため、単純にすべての要求にプリロードされている機能のフラットライブラリ(ないOO)、のために意図され、「ファイル」。

は、オペコード・キャッシュの使用は、2つの間の効率差を柔らかくなりますが、メモリ使用の問題が残ります。

関連する問題