假設環境如下:
- 網站根目錄為 /var/www/mysite
- 自行開發套件的路徑為 /var/www/mypackage
- 套件名稱為 duan/firstpackage
- 一個名稱為 mylog 的 class
原本設定方式還是要透過 git 方式來加入自己開發的套件, 而不是直接使用本機 (local file) 上的套件檔案.
正確做法應該是將 compoeser 裡的 repo 設定改為 path , 這樣就可以加上 symlink 參數, 產生 symbolic link. 這樣直接修改套件內容就會直接產生效果, 對於開發中的套件會方便許多. (原本方式要在修改後更新到 git , 然後在引用套件的地方跑一次 composer update 才會從 git 取出來更新 vendor 下的套件檔案).
[修正後的 composer.json 內容]
更新 compoer.json 的內容如下 (只列出 repo 的部份, 其它照舊)
"repositories": [{
"type": "path",
"url": "/var/www/piiplib/piiplib",
"options": {
"symlink": true
}
}]
[修正前的流程]處理流程大致如下
1. 到 /var/www/mypackage 建立 composer.json (例如用 composer init )
然後修改內容大致如下 (以 follow PSR 4.0 來說)
{
"name": "duan/firstpacakge",
"description": "my first pacakge",
"license": "MIT",
"authors": [
{
"name": "duan",
"email": "duan@example.com"
}
],
"require": {},
"require-dev": { },
"autoload": {
"psr-4": {"Duan\\Firstpackage\\": "src"}
}
}
2. 在 /var/www/mypackage 建立以下路徑 src tests 後, 執行 composer update
3. 在 /var/www/mypackage/src 下建立檔案 Mylog.php
namespace 為 Duan\Firstpackage
4. 對 /var/www/mypackage 做套件管理 (git)
a. git init
b. edit .gitignore , 加入 /vendor 和 composer.lock
c. git add .
d. git commit -a -m "some description"
5. 到 /var/www/mysite 下, 在 composer.json 加入以下內容
"require": {
"duan/firstpackage": "dev-master"
}
"repositories": [{
"type": "vcs",
"url": "/var/www/mypackage",
}]
6. 在 /var/www/mysite 執行 composer update沒錯誤的話, 在 /var/www/mysite/vendor/ 裡, 應該會複製了一份 /var/www/mypackage commit 在 git 裡的內容到 /var/www/mysite/vendor/duan/firstpackage 路徑下
這時候要使用時, 依 composer autoload 的方式就可以使用了, 例如
require_once "/var/www/mysite/vendor/autoload.php";
use Duan\Firstpackage\Mylog;
$log = new Mylog;
參考資料
http://culttt.com/2014/05/07/create-psr-4-php-package/
沒有留言:
張貼留言