2015-12-21 68 views
0

我在包裝師學習上創建了一個簡單的包(tommytest/tommytest)。它安裝的很好,但是我必須在安裝後立即運行「composer dump-autoload -o」。之前手動運行轉儲自動加載我得到這個:爲什麼安裝我的軟件包後必須運行Composer轉儲?

致命錯誤:類 'mysqlgridspace \頁' 用C未找到:\ XAMPP \ htdocs中\簡單\的index.php上線5

手動後運行轉儲自動加載它工作正常。安裝軟件包時不應該自動處理自動加載設置嗎?

這裏是我的composer.json(位於:簡單/供應商/ tommytest/tommytest/composer.json

{ 
    "name": "tommytest/tommytest", 
    "type": "library", 
    "description": "Framework agnostic data grid", 
    "keywords": ["datagrid","data grid"], 
    "homepage": "https://github.com/escalibore/tommytest", 
    "license": "MIT", 
    "authors": [ 
    { 
     "name": "Tommy Bert", 
     "email": "[email protected]", 
     "homepage": "http://tberthold.com", 
     "role": "Developer" 
    } 
    ], 
    "require": { 
    "php": ">=5.3.0" 
    }, 
    "autoload": { 
    "psr-4": { 
     "mysqlgridspace\\":"src/" 
    } 
    } 
} 

我的類文件(位於:簡單/供應商/ tommytest/tommytest /src/Mysqlgridmain.class.php

<?php 
namespace mysqlgridspace; 

class Page { 
    public function __construct() 
    { 
     echo "hello, i am a page.<br>"; 
    } 
} 

class Book { 
    public function __construct() 
    { 
    echo "hello, i am a book.<br>"; 
    } 
} 

回答

1

這些類不能使用Composer的PSR-4自動加載器自動加載,因爲它將類名mysqlgridspace\Page解析爲名爲Page.php的文件,該文件應該存在於src中,但它不存在。

首先,每個文件中只應該聲明一個類。

你應該有

src/ 
    Book.php 
    Page.php 

每一個聲明只類。

然後你的PSR-4自動加載應該可以工作。參考http://www.php-fig.org/psr/psr-4/

+0

感謝@localheinz,將每個類放入它自己的同名文件中,這讓我更好地理解了psr-4自動編碼的工作原理。謝謝你解決這個謎團! –

0

我找到了解決問題的方法。我加「文件」: 「SRC/Mysqlgridmain.class.php」],到自動加載細節我composer.json

所以從去:

"autoload": { 
    "psr-4": { 
    "mysqlgridspace\\":"src/" 
} 

到:

"autoload": { 
    "files": ["src/Mysqlgridmain.class.php"], 
    "psr-4": { 
    "mysqlgridspace\\":"src/" 
} 

我不知道爲什麼psr-4標籤沒有這樣做,但我認爲這是一個可以接受的解決方法。

+0

可能是因爲'.class.php'擴展名,Composers類掃描器沒有選中它。您可以將該文件從「Mysqlgridmain.class.php」重命名爲「MysqlGridMain.php」,然後重新嘗試。 –

相關問題