web-dev-qa-db-ja.com

ReflectionException:クラスClassNameは存在しません-Laravel

すぐに、php artisan db:seedコマンドを入力しています。

私はErrorを得ています

[ReflectionException]
クラスUserTableSeederは存在しません

root@dd-desktop:/opt/lampp/htdocs/dd/laravel# php artisan db:seed

ここに、私のUserTableSeeder.phpDatabaseSeeder.phpページがあります

UserTableSeeder.php

<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;

class UserTableSeeder extends Seeder
{    
    public function run()
    {
        DB::table('users')->delete();
        User::create(array(
        'name'     => 'Chris Sevilleja',
        'username' => 'sevilayha',
        'email'    => '[email protected]',
        'password' => Hash::make('awesome'),
        ));
    }    
}

DatabaseSeeder.php

<?php

use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;

class DatabaseSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        //Model::unguard();

        Eloquent::unguard();
        $this->call('UserTableSeeder');

        //$this->call(UserTableSeeder::class);

        //Model::reguard();
    }
}

これを参照しています リンク ログインページの設計と開発へ。この問題を解決するのを手伝ってください。ありがとう。

41
Nana Partykar

composer updateを実行してから、composer dump-autoloadを実行します。

上記で問題が解決しない場合、プロジェクト相対パスを含むようにcomposer.jsonファイルのclassmapを変更しますあなたのPHPファイルに:

"autoload-dev": {
    "classmap": [
        "tests/TestCase.php",
        "database/seeds/UserTableSeeder.php" //include the file with its path here
    ]
}, /** ... */

その後すぐにcomposer dump-autoloadを実行すると、breeze!のように動作するはずです。

@JMSamudioによる編集

composer dump-autoloadが見つからない場合は、このオプションcomposer config -g -- disable-tls trueを有効にしてください。

109

私の経験から、これはほとんどの場合、呼び出そうとしているクラスにバグがあり、コンパイルできないときに表示されます。反映されていないクラスが独自に実行できるかどうかを確認してください。

14
Kamaro Lambert

composer dump-autoloadで修正する必要があります。

11
fsavina

この問題があり、php artisan config:cacheを実行することで解決できました。問題は、以前にコマンドを実行し、後で新しいシーダークラスが含まれていたことです。キャッシュされた構成は、新しいクラスを認識しませんでした。したがって、そのコマンドを再度実行すると機能しました。

新しいシーダークラスを含めるために頻繁に変更する場合は、php artisan config:clearの実行を検討してください。これにより、必要な数だけ変更を加えることができ、テスト後にconfig:cacheを再度実行して、最適に実行できるようになります。

4

何らかの理由で、composer dumpautoload -oを実行する必要がありました。最適化を意味するフラグ-oに注意してください。なぜそれだけで機能するのかはわかりませんが、試してみてください。おそらくそれは誰かを助ける。

3

classにも同じ問題があります。 composer dump-autoloadphp artisan config:clearを試しましたが、問題は解決しませんでした。

その後、問題を見つけるためにコードを読むことにし、問題を見つけました。私の場合の問題は、クラスにコンマがないことです。私のモデルコードを参照してください:

{
    protected
    $fillable = ['agente_id', 'matter_id', 'amendment_id', 'tipo_id'];

    public
    $rules = [
        'agente_id' => 'required', // <= See the comma
        'tipo_id' => 'required'
    ];

    public
    $niceNames = [
        'agente_id' => 'Membro', // <= This comma is missing on my code
        'tipo_id' => 'Membro'
    ];
}
3
Luciano Braga
composer dump-autoload
php artisan config:clear
php artisan cache:clear

これは確実に機能します。そうでない場合は、行う必要があります

composer update

次に、前述のコマンド。

1
user3309447

この質問に対する答えとして書いているのではありません。しかし、同じバグに直面したが、ここで述べた答えがうまくいかない場合は、他の人を助けたいです。また、ここで説明したすべてのソリューションを試しました。しかし、私の問題はnamespaceでした。パスが間違っていました。

私が使用した名前空間は次のとおりです。

namespace App\Http\Controllers;

しかし実際には、コントローラーは「FrontEnd」という名前のフォルダー内にあります

そのため、ソリューションはnamespaceを次のように変更します:

namespace App\Http\Controllers\Frontend;
1
Abhi

次のコマンドを使用してみてください

php artisan db:seed --class=DatabaseSeeder
1
easycodingclub

それを見つけるために名前空間に割り当てる必要があります。

namespace App\Http\Controllers;
1
G-Man

大文字を確認してください!

ホストシステム(WindowsまたはMac)はデフォルトで大文字と小文字を区別せず、Homesteadはこの動作を継承します。一方、運用サーバーでは大文字と小文字が区別されます。

ClassNotFound例外が発生するたびに、次を確認してください。

  1. つづり
  2. 名前空間
  3. 大文字
1
Fazil Raza

クラスを再作成しましたが、うまくいきました。すべてのファイルコンテンツをコピーし、ファイルを削除して、php artisan make:seeder ModelTableSeederを実行します。 composer dump-autoloadがうまくいかなかったからです。

0
М.Б.
composer update 

上記のコマンドは私のために働いた。

La-ravelで新しい移行を行うたびに、composer.jsonファイルのclassmapを更新する必要があります。

0
KNK

シーダークラスファイルを探しているときは、composer dump-autoloadを実行できます。再度実行してモデルを探しているときは、シーダーファイル自体で参照できます。そのようです、

use App\{Model};
0
Kent Aguilar
composer dump-autoload 

これはそれを修正します

0
Richard kortby

質問と厳密には関係ありませんが、エラーReflectionException: Class config does not existを受け取りました

スペースを含む新しい.env変数を追加しました。 php artisan config:clearを実行すると、スペースを含む.env変数を"sで囲む必要があることがわかりました。

これで、私のアプリケーションは再び動作するようになりました。Laravel Homestead(5.4)でまだ開発中のように設定をクリアする必要はありません。

0
Scott Brown

通常、接続を閉じるのを忘れると、エラーメッセージReflectionException: Class app does not existが幼虫テストに表示されます。

テストでsetUpまたはtearDown関数を使用している場合は、parent::setUpおよびparent::tearDownを呼び出して接続を閉じることを忘れないでください

    public function setUp()
    {
        parent::setUp();
    }

    public function tearDown()
    {
        parent::tearDown();
    }
0
Suresh Dhakal

appuse大文字にすると、Appと書き込めます。私のために働いた。

0
Epsilon47

psr-を使用する場合、クラス名にアンダースコアが含まれていないことを確認してください。