独自のクラスを追加するために、library
フォルダー内にapp
フォルダーを作成しました。
これはファイルapp/library/helper.php
の内容です:
<?php
namespace Library;
class MyHelper
{
public function v($arr)
{
var_dump($arr);
}
}
名前空間をcomposer.json
に追加しました:
そして私は走った
$ composer dump-autoload
しかし、効果がないようです。
ファイル
vendor/composer/autoload_psr4.php
vendor/composer/autoload_classmap.php
変わりませんでした。
MyHelper
のインスタンスを作成しようとすると、Laravelは次のエラーを報告します。
私が何を間違っているのかわかりません。
自動読み込みの設定はほぼ良好ですが、
この問題を修正するには、オートローディング構成を調整します。
{
"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);
}
}
参考までに、以下を参照してください。
composer.json
でfiles
ディレクティブを使用: https://getcomposer.org/doc/04-schema.md#files
{
"autoload": {
"files": ["app/library/helper.php"]
}
}
Composer.jsonを使用します。
"autoload": {
"classmap": [
"database",
"app/Transformers"
]
},
App/Transformersを追加したように、自動ロードディレクトリを追加します。
Run composer dump-autoload
を追加することを忘れないでください。
このメソッドの唯一の問題は、新しいクラスを追加するたびにcomposer dump-autoload
を実行する必要があることです。
または、composer.jsonで「ファイル」を使用できます。
"autoload": {
"files": ["src/MyLibrary/functions.php"]
}
私はこの質問が少し前に回答されたことを知っていますが、それが機能しない理由は、ファイル構造に対応する名前空間を指定する必要があるためです。したがって、LibraryクラスはAppフォルダー内にあるため、以下が必要です。
namespace App\Library;
class MyHelper{
public function v($arr){
var_dump($arr);
}
}
さらに、クラスMyHelper
を呼び出す場合は、ファイルMyHelper.phpを呼び出す必要があります。