4

私はLaravel 4にapp/helpersディレクトリからヘルパーファイルを自動ロードさせようとしています(明らかにこれを作成しました)。

私は Composer の方法でそれを行うことから始めました: へのパスを追加してからcomposer.jsondump-autoload. これはうまくいきませんでした。次に、app/start/global.phpファイルを試してみましたが、どちらも機能しませんでした。

ヘルパー ファイルにクラスをスローしていないことに注意してください。それが Facades と Packages の目的です。vendorLaravel 独自のもの (ディレクトリ内) に似た、小さなヘルパー関数だけが必要です。私がこれを言うのは、コンポーザーがリスト クラス (名前空間を含む) のみをダンプするように見えるからです。

ヘルパーを自動ロードするにはどうすればよいですか?

アップデート

また、ClassLoader::addDirectories()関数はクラスでは機能しないようです-なぜそこにあるのですか? これと Composer の両方を使用する必要がありますか?

編集

私の質問が理解されていないようです。私のapp/helpersディレクトリには、paths.php. theme_path($location)その中の関数 ( ) をグローバル スコープ内で呼び出せるようにしたい。

4

4 に答える 4

9

次のことを行う必要があります。

"autoload": {
    "files": [
        "file location go here"
    ]
},

その後、ヘルパー ファイル内の関数を使用できるようになります。ただし、これにより、すべてのリクエストで明示的にファイルがロードされることに注意してください。詳細については、http: //getcomposer.org/doc/04-schema.md#filesを参照してください。

これがヘルパーの頻繁に使用されるファイルでない限り、これを避け、名前空間とクラスで整理して名前の衝突を避けることをお勧めします。

于 2013-06-22T08:39:51.573 に答える
3

自動ロードはクラス専用です。関数名の 1 つに基づいてランダムな php ファイルを実際に自動ロードすることはできません。

あなたの最善の策は、OOP に移行し、ヘルパーにクラスを使用することです。必要な場合にのみ自動ロードされたファイルの効率を得ることができ、他の Laravel コミュニティが行っていることに近づくことができます。

しかし、まだプレーンな古い非オブジェクト php 関数を使用したい場合はrequire()、start.php からそれらすべてを個別に単純に使用できると思いますが、それらはすべてのページ要求で読み込まれます。

于 2013-06-22T10:37:31.797 に答える
0

さて...どのように動作するようになったかを示すために、私の作曲家とヘルパーをお見せできます:

"autoload": {

    "psr-0": {
        "Helpers": "app/libraries"
    }
}

そして app/libraries/Helpers/DateHelper.php に (たとえば)

<?php namespace Helpers;

class DateHelper extends \DateTime {


}

ヘルパー ファイルを作成したら、

composer dump-autoload

そして今、あなたのヘルパーを Helpers\DateHelper として使用してください

于 2013-06-21T16:39:10.980 に答える