[英]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.php
和DatabaseSeeder.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
,它現在應該可以像微風一樣工作了!
如果找不到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-autoload
和php 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異常時,請檢查以下內容:
出於某種原因,我不得不運行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::setUp
和parent::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.