2017-07-11 38 views
1

好的,所以Laravel在過去幾天對我來說行爲很奇怪。Laravel引用自定義類時的奇怪行爲

我正在開發一個Laravel Package並具有以下目錄結構:

vendor 
-student 
--myPackage 
---src 
----controllers 
----models 
----mail 
----routes 
----views 

我的模型文件的一個示例:

<?php 

namespace Student\myPackage\Model; 

use Illuminate\Database\Eloquent\Model as BaseModel; 

class MyClass extends BaseModel 
{ 
    // 
} 

我試圖訪問該模型文件在我的控制器,像這樣use Student\myPackage\Model\MyClass as aMyClass。我在模型目錄中有幾個模型,並且每個模型都在同一命名空間下,即Student\myPackage\Model

問題是我在訪問路由時出現以下錯誤。

FatalThrowableError

班 '學生\ mypackage中\型號\ MyClass的' 未找到

我有上只有一個模型類此錯誤,而那也是當它被引用一個控制器,如果我在路徑文件中引用它,如下所示,那麼就沒有問題了。

use Student\myPackage\Model\MyClass as aMyClass 

Route::get('/test', function() { 
    $g = new aMyClass; ($g); 
})->middleware('web'); 

我甚至擦除了模型文件,然後重新編碼所有東西,但問題仍然存在。然後在我的控制器中,我重新編寫了所有正在使用的模型類的使用語句,並且它的工作原理。記得我甚至重寫了這個類的使用聲明多次,但它不起作用。無論如何,所以現在它正在工作,但現在我與另一個課程相同的問題,這是一個郵寄課程。

可能是什麼問題,是關於類的引用順序或關於命名空間的一些問題?


包的Composer.json

"autoload": { 
    "psr-0": { 
     "Student\\myPackage\\": "src/" 
    } 
} 
+0

你還可以分享你的composer.json的自動加載位嗎? – apokryfos

+0

你需要給出完整的路徑,例如:'「psr-0」:{ 「Student \\ MyPackage \\」:「student/myPackage/src」 }'試試這個,讓我知道這是否可行! –

+0

@HirenGohel不,它沒有工作。 – StudentX

回答

0

你忘了複數化你的模型命名空間。

嘗試用這種use聲明:

use Student\myPackage\Models\MyClass as aMyClass; 

你的模型在src/models,作曲家將命名空間的模型作爲Student\myPackage\Models

0

您的命名空間是不正確的

Student\myPackage\Model\MyClass 

將其更改爲

Student\myPackage\Models\MyClass 

檢查完成後,註冊您的服務提供商(別名,如有)。使用別名將幫助您節省時間和精力。