2013-04-24 125 views
4

我那麼發現這個上:How to use PHPExcel correctly with Symfony 2使用PHPExcel與作曲家和Symfony2.2

這工作,但我想與作曲家使用它。 我已經解決了第一部分:加載PHPExcel一個特殊的標籤(最後的穩定版)

我沒搞清楚如何與這個語法獲取標籤:

"repositories": [ 
    { 
     "type": "vcs", 
     "url": "https://github.com/umpirsky/SyliusAssortmentBundle" 
    } 
] 

於是我就用在Package符號:
我發現,在reference應該在GitHub上的標籤名。 和version不能是相同的值(PHPExcel_1.7.8)。似乎不允許使用字母字符,所以它只是版本號(1.7.8)

"repositories": [{ 
    "type": "package", 
    "package": { 
     "name": "PHPOffice/PHPExcel", 
     "version": "1.7.8", 
     "source": { 
      "url": "https://github.com/PHPOffice/PHPExcel.git", 
      "type": "git", 
      "reference": "PHPExcel_1.7.8" 
     } 
    } 
}] 

下一步我沒有解決。我嘗試了自動加載的每個組合:psr-0,classmap,不同的路徑,相對於項目/供應商/ phpexcel,每次更新作曲家,但沒有任何工作。

它僅適用,如果我把這個線

$loader->add('PHPExcel', __DIR__.'/../vendor/PHPOffice/PHPExcel/Classes'); 

到應用程序/ autoload.php。我發現,第一個字符串(PHPExcel)也可以是一個空字符串:''
是否有差異性,如果我用PHPExcel''

所以我的主要問題是,我該如何避免寫這行到autoload.php中,把相應的命令放到我的項目的composer.json中?

回答

7

關於您的主要問題,問題是,一旦安裝了軟件包,如果您更新的定義,並添加自動加載的東西,然後在運行composer update不會改變任何東西。 Composer仍然具有已經安裝在其「緩存」中的舊軟件包,因此它使用該軟件包來生成自動加載並且失敗。

要解決這個你應該直接刪除vendor/PHPOffice/PHPExcel和運行composer update,將與您composer.json的最新信息,包括自動加載,等等。你應該自動加載指定這樣重新安裝:

"repositories": [{ 
    "type": "package", 
    "package": { 
     "name": "PHPOffice/PHPExcel", 
     "version": "1.8.0", 
     "source": { 
      "url": "https://github.com/PHPOffice/PHPExcel.git", 
      "type": "git", 
      "reference": "1.8.0" 
     }, 
     "autoload": { 
      "psr-0": { 
       "PHPExcel": "Classes/" 
      } 
     } 
    } 
}], 
"require": { 
    "PHPOffice/PHPExcel": "1.8.*", 
    ... 

關於二次問題'' VS 'PHPExcel'''只是說,任何命名空間可以在此目錄中找到。這意味着自動加載器將始終掃描此目錄以查找類,這很方便,但比顯式地將名稱空間映射到目錄要慢。所以兩者都可以工作,但更具體的形式更受歡迎,尤其是在您公開發布的軟件包中。

+0

你的意思,與'將與您composer.json的最新信息,包括自動加載,etc.'重新安裝?如何爲PHPExcel包含/啓用自動加載,它沒有自己的composer.json,也沒有名稱空間? – timaschew 2013-04-24 18:38:03

+0

我會編輯我的答案來回答這個問題。 – Seldaek 2013-04-25 08:02:29

+0

正如我所說,一旦你這樣做,你必須首先刪除供應商/ PHPOffice然後運行更新,強制它重新安裝包。 – Seldaek 2013-04-25 12:17:39