2017-08-03 53 views
0

我試圖使用symfony flex一個包。作曲家加載命名空間的單個類

我有這樣的目錄結構

/ 
    src/ 
    AppBundle/ 
     AppBundle.php 
     # Many classes 
    Kernel.php 

我想加載Kernel.php類此命名空間App和類裏面的appbundle與命名空間AppBundle

我試過很多作曲家配置,但是我無法加載它們。

"psr-4": { 
    "AppBundle\\": "src/AppBundle/", 
    "App\\": "src/" 
} 

但我得到這樣的錯誤:

Expected to find class "App\AppBundle\AppBundle" in file "/var/www/vhosts/flex/src/AppBundle/AppBundle.php" 

UPDATE

的src/Kernel.php階層有不同的命名空間,我不能改變它,因爲其他類用它,命名空間是App。某些腳本調用使用use App\Kernel

src/AppBundle/AppBundle.php類有這個命名空間AppBundle

有辦法做到這一點這門課嗎?

更新2

我整理出來:

"autoload": { 
    "psr-4": { 
     "AppBundle\\": "src/AppBundle/" 
    }, 
    "classmap": [ 
     { "App\\Kernel": "src/Kernel.php" } 
    ] 
}, 
+0

嘗試這樣' 「的appbundle \\」: 「SRC /」,' –

+0

我得到這個例外 '''試圖從命名空間 「的appbundle」 裝入類 「的appbundle」。 您是否忘記了「AppBundle \ AppBundle」的「use」語句?'' – anacona16

+0

好吧,請嘗試在您的Kernel.php命名空間AppBundle \ AppBundle' –

回答

0

我會建議使用Kernel.php類映射來代替:

"autoload": { 
    "psr-4": { "AppBundle\\": "src/AppBundle" }, 
    "classmap": [ "src/Kernel.php" ] 
} 

https://getcomposer.org/doc/04-schema.md#classmap

+0

我試過了,但是這個類有一個命名空間'App' – anacona16

+0

從文檔看來它會通過搜索所有.php文件中的類來解析類名。在這種情況下,您可能需要創建一個src/App/Kernel.php,然後相應地修改您的psr-4自動加載。 – dbrumann

0

你只需要

"psr-4": { "App\\": "src/" } 
相關問題