簡體   English   中英

ReflectionException: Class ClassName 不存在 - Laravel

[英]ReflectionException: Class ClassName does not exist - Laravel

很快,我正在輸入php artisan db:seed命令。

我收到錯誤,例如

[反射異常]
類 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'    => 'chris@scotch.io',
        'password' => Hash::make('awesome'),
        ));
    }    
}

數據庫瀏覽器.php

<?php

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

class DatabaseSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        Eloquent::unguard();
        $this->call('UserTableSeeder');
    }
}

我引用此鏈接設計和開發登錄頁面。 請幫我解決這個問題。 謝謝。

執行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 ,它現在應該可以像微風一樣工作了!

由@JMSamudio 編輯

如果找不到composer dump-autoload ,只需啟用此選項composer config -g -- disable-tls true

根據我的經驗,當您嘗試調用的類有一些錯誤並且無法編譯時,大多數情況下都會出現這種情況。 檢查未被反射的類是否可以自行執行。

composer dump-autoload應該修復它。

我遇到了這個問題,我可以通過執行php artisan config:cache來解決它。 問題是我之前已經運行過該命令,后來又包含了一些新的播種機類。 緩存的配置無法識別新類。 所以再次運行該命令有效。

如果您發現自己經常更改以包含新的播種機類,請考慮運行php artisan config:clear 這將使您能夠進行任意數量的更改,然后在測試之后您可以再次運行config:cache以使事情再次以最佳方式運行。

我對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'
    ];
}

檢查您的大小寫!

你的主機系統(Windows 或 Mac)默認不區分大小寫,Homestead 繼承了這個行為。 另一方面,您的生產服務器區分大小寫。

每當您收到ClassNotFound異常時,請檢查以下內容:

  1. 拼寫
  2. 命名空間
  3. 大寫

出於某種原因,我不得不運行composer dumpautoload -o 注意標志-o表示優化。 我不知道為什么它只適用於它,但試一試。 也許它可以幫助某人。

composer dump-autoload
php artisan config:clear
php artisan cache:clear

這肯定會奏效。 如果沒有,那么你需要做

composer update

然后,上述命令。

您需要將它分配給一個名稱空間才能找到它。

namespace App\Http\Controllers;

如果問題沒有被composer dump-autoload解決或者不是新創建的類。

檢查您的類及其特征中的語法錯誤。 在我的情況下,Trait 中存在語法錯誤,但使用該 Trait 為實際類顯示了ReflectionException

當它在尋找播種機類文件時,你可以運行composer dump-autoload 當您再次運行它並且它正在尋找模型時,您可以在播種器文件本身上引用它。 像這樣,

use App\{Model};

嘗試使用以下命令

php artisan db:seed --class=DatabaseSeeder

與問題不嚴格相關,但收到錯誤ReflectionException: Class config does not exist

我添加了一個新的.env變量,其中包含空格。 運行php artisan config:clear告訴我任何帶有空格的.env變量都應該用" s 包圍。

這是否和我的應用程序聲明再次工作,不需要明確的配置,因為仍在 Laravel Homestead (5.4) 上開發

不要把這個當作這個問題的答案。 如果它可以幫助其他有相同錯誤的人,但這里提到的答案對他們不起作用。 我也嘗試了這里提到的所有解決方案。 但我的問題是我使用的命名空間 路徑錯了。

我使用的命名空間是:

namespace App\Http\Controllers;

但實際上控制器駐留在名為“ FrontEnd ”的文件夾中

所以解決方案是將命名空間更改為:

namespace App\Http\Controllers\Frontend;

我重新創建了課程,並且奏效了。 復制所有文件內容,刪除文件,然后運行php artisan make:seeder ModelTableSeeder 因為composer dump-autoload對我不起作用。

您可以嘗試use大寫來編寫app ,因此App . 為我工作。

通常,當您忘記關閉連接時,幼蟲測試中會出現錯誤消息ReflectionException: Class app does not exist

如果您在測試中使用 setUp 或 tearDown 函數,請不要忘記通過調用parent::setUpparent::tearDown來關閉連接

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

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

如果使用psr-0 ,請檢查類名不包含下划線。

我在嘗試訪問自定義路由文件中的端點時遇到此錯誤,該文件在RouteServiceProvider前置了一個命名空間

  • 類中的命名空間是正確的。
  • 類文件的文件路徑是正確的。
  • 來自路由文件的控制器調用是正確的(當不考慮來自RouteServiceProvider的前置命名空間時)
  • RouteServiceProvider中的默認$router->group(['namespace' ...])不正確

更新RouteServiceProvider的命名空間解決了這個問題,因為路由文件中指定的相對控制器路徑現在可以正確解析。

檢查文件/文件夾權限

我今天遇到了這個錯誤,沒有任何緩存、配置、自動加載清除做任何幫助。 更令人困惑的是,如果由 Web 請求啟動,則會引發錯誤,但在 tinker 中訪問該類工作正常。

在檢查了拼寫錯誤、語法錯誤和不正確的命名空間后,我最終發現這是一個文件權限問題。 包含我的類的文件夾和文件沒有適當的權限,所以它拋出了這個錯誤。 我的錯誤權限級別是 771(文件夾)和 660(文件),通過將其更改為 775 和 664,我能夠使其正常工作。

我對不同行為的理解是,當從命令行運行時,它以我的用戶身份讀取文件(它具有所需的所有權限),但是當從網絡啟動時,它使用“其他”權限組,它無能為力.

composer dump-autoload 

這將解決它

composer update 

以上命令對我有用。

每當您在 la- classmap中進行新遷移時,您都需要刷新composer.json文件中的類classmap

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM