web-dev-qa-db-ja.com

Laravel 5.6 Tinkerクラス '...'は1行目のPsy Shellコードで見つかりません

新しくインストールしたLaravelで簡単なクラスを作成しようとしています。このために、フォルダーapp/Convertを作成し、そこにphpファイルを配置しました。クラスは次のようになります。

<?php 

namespace App\Convert;

class Converter
{
    public function __construct()
    {
        ...Code
    }
}

ティンカーからアクセスしようとすると:

use App\Convert\Converter;
new Converter;

私は得る:

PHP Fatal error:  Class 'App/Convert/Converter' not found in Psy Shell code on line 1

私は何を間違えていますか?私が理解しているようにlaravelはアプリフォルダとそのサブフォルダ内のファイルを自動実行する必要がありますか、間違っていますか?

編集:間違って最初に書いたときは申し訳ありません(名前空間でいろいろ遊んでいるので、間違ったバージョンを使用しました)。問題は、実際にはファイル名がConverter.php以外の名前であったため、Converter.phpに変更したときに状況が変化し始めたことです。彼がコメントではなく回答として置いた場合、デボンの答えを正しい答えに設定します。ここに書いてください:

クラスを含むファイルの名前はクラス名と同じである必要があります。また、ファイルへのパスは名前空間のパスと同じです。(答えの下のマシューのコメントを参照)

5
Timkolm

クラスの名前空間は、インポートの方法とは異なります。そこでApp\Convertとして設定します。 App\Convert\Converterとしてインポートする必要があります。

クラスの完全修飾クラス名には、名前空間とクラス名が含まれます。そのため、たとえば、App\Fooという名前空間を持つBarというクラスがある場合、完全修飾クラス名はApp\Foo\Barであり、Bar、次のようにインポートする必要があります。

use App\Foo\Bar;

また、デボンが以下に述べたように、デフォルトのLaravelオートローダー設定を取得するには、app/Foo/Bar.phpにクラスを含むファイルが必要です。

6
Matthew Daly

キャッシュをクリアする必要がある場合がありますが、私の場合はこのコマンドが機能しました:

composer dump-autoload

私もそれがあなたのために働くことを願っています

よろしく

5
Ale DC