2013-12-12 37 views
0

composer.json包含以下命名空間和類用下劃線名稱

... 
"autoload": { 
    ... 
    "psr-0":{"Acme": "app/lib"} 
}, 

的app/lib中/阿克米/模型/產品/我Display.php的有以下幾點:

<?php 
namespace Acme\Models\Product; 
use Eloquent; 
use Db; 
class Product_Display extends Eloquent 
{ 

我因爲存儲庫類中的類名稱中的下劃線,所以如何調用該類:

<?php 
namespace Acme\Repositories; 
use Acme\Models\Product\Display as Product_Display; 

... 

Product_Display::where('page_id','=',$page_id)->first(); 

這給出了我一個'Acme \ Models \ Product \ Display'類未找到錯誤。 我猜問題在於使用Acme \ Models \ Product \ Display作爲Product_Display,但我嘗試了幾種變體,其中沒有一個似乎能解決問題。

回答

1

你作曲家轉儲自動加載?通過在項目的根目錄中輸入composer dump-autoload來完成此操作。

每當您對composer.json文件進行更改時,都需要允許composer重新構建autoload文件。在psr-0的情況下,您只需要這樣做。

在類映射自動加載的情況下,每次將文件添加到正被自動加載的目錄時,都需要作者dump-autoload。

編輯:

要解決:改變use Acme\Models\Product\Display as Product_Display;use Acme\Models\Product\Display。將類名從Product_Display更改爲Display。

我想我發現了這個問題。你有use Acme\Models\Product\Display as Product_Display;,但你需要use Acme\Models\Product\Product_Display;,因爲使用語句的最後部分是類的名稱。在這種情況下,您的類實際上被命名爲Product_Display,而不是Display(它是文件名)。您可能還需要更改文件名以匹配類名(爲了約定,也應該這樣做)。

+0

是的,我還有其他的課程,包括那裏的工作,讓我相信作曲家位不是問題。 – cactusphone

+1

@cactusphone哦,我想我發現了這個問題。由於use語句的最後一部分是類的名稱,因此您需要'使用Acme \ Models \ Product \ Display作爲Product_Display;'但您需要'使用Acme \ Models \ Product \ Product_Display;'。在這種情況下,您的類實際上被命名爲Product_Display,而不是Display(它是文件名)。您可能還需要更改文件名以匹配類名(爲了約定,也應該這樣做)。 – echochamber

+0

我試過了:將文件名改爲Product_Display.php,類名已經是'Product_Display'並且改變了使用語句來使用'Acme \ Models \ Product \ Product_Display作爲Product_Display;'我仍然得到一個錯誤,說類無法找到 – cactusphone

相關問題