web-dev-qa-db-ja.com

Laravel 5.1でカスタムクラスを自動ロードするにはどうすればよいですか?

独自のクラスを追加するために、libraryフォルダー内にappフォルダーを作成しました。

enter image description here

これはファイルapp/library/helper.phpの内容です:

<?php

namespace Library;

class MyHelper
{
    public function v($arr)
    {
        var_dump($arr);
    }
}

名前空間をcomposer.jsonに追加しました:

enter image description here

そして私は走った

$ composer dump-autoload

しかし、効果がないようです。

ファイル

  • vendor/composer/autoload_psr4.php
  • vendor/composer/autoload_classmap.php

変わりませんでした。

MyHelperのインスタンスを作成しようとすると、Laravelは次のエラーを報告します。

enter image description here

私が何を間違っているのかわかりません。

9
GerBawn

自動読み込みの設定はほぼ良好ですが、

  • 名前空間が間違っている
  • 道を間違えた

この問題を修正するには、オートローディング構成を調整します。

{
    "autoload": {
        "classmap": [
            "database"
        ],
        "psr-4": {
            "App\\": "app/"
        }
    }
}

次に、ディレクトリの名前を/libraryから/Libraryに変更します(大文字と小文字に注意)。

次に、ファイルの名前を/app/Library/helper.phpから/app/Library/MyHelper.phpに変更します(クラス名がファイル名と一致する必要があることに注意してください)。

次に、/app/Library/MyHelperによって提供されるクラスの名前空間を調整して、PSR-4プレフィックス(およびプロジェクトの構造)とクラスの使用法を一致させます。

namespace App\Library;

class MyHelper 
{
    public function v($arr)
    {
        var_dump($arr);
    }
}

参考までに、以下を参照してください。

6
localheinz

composer.jsonfilesディレクティブを使用: https://getcomposer.org/doc/04-schema.md#files

{
    "autoload": {
        "files": ["app/library/helper.php"]
    }
}
3
Maxim Lanin

Composer.jsonを使用します。

   "autoload": {
    "classmap": [
        "database",
        "app/Transformers"
    ]
 },

App/Transformersを追加したように、自動ロードディレクトリを追加します。

Run composer dump-autoloadを追加することを忘れないでください。

このメソッドの唯一の問題は、新しいクラスを追加するたびにcomposer dump-autoloadを実行する必要があることです。

または、composer.jsonで「ファイル」を使用できます。

"autoload": {
    "files": ["src/MyLibrary/functions.php"]
}
0
Rutvik Bhatt

私はこの質問が少し前に回答されたことを知っていますが、それが機能しない理由は、ファイル構造に対応する名前空間を指定する必要があるためです。したがって、LibraryクラスはAppフォルダー内にあるため、以下が必要です。

namespace App\Library;

class MyHelper{
    public function v($arr){
        var_dump($arr);
    }
}

さらに、クラスMyHelperを呼び出す場合は、ファイルMyHelper.phpを呼び出す必要があります。

0