php – composer.json 設定 classmap 指定自動讀取的檔案或路徑

置入類別

若我們有2個 Library ,位於 Jsn/Cart/lib/Cart.php

<?php 
namespace Jsn;

class Cart {

    public function add()
    {
        return "Cart Success";
    }

}

與 Jsn/Cart/lib/Transport.php

<?php 
namespace Jsn;

class Transport {

    public function add()
    {
        return "Transport Success";
    }

}

因為我們要用 Composer 的 classmap 設定。必須要符合 psr-0(已棄用), psr-4 的規範,所以類別一定要按照格式,例如我上面的就有按照psr-4。詳細說明參考原文,或中文網友翻譯。基本上注意這幾點就可以

  • 一定要有命名空間,如 namespace Jsn
  • 可以有子命名空間,可能長這樣 “namespace Jsn\DB\Mysql”  “namespace Jsn\DB\Pdo”,那麼 DB 就是子命名名空間
  • 下滑線沒有意義,所以不要再使用了
  • 敏感大小寫區分

所以基本上我們會這麼使用類別

new Jsn\Cart;
new 命名空間\{可有可無的子命名空間}\類別名稱

 

告訴 Composer 路徑

在 composer.json 添加 autoload 設定

{
    "autoload" : {
        "classmap": [
        	"Jsn/Cart/lib"
        ]
    }
}

 

composer 傾倒

接著下命令讓 composer 傾倒 composer dump-autoload 。如果路徑設定沒問題,就會顯示 Generating autoload files 字句。我們可以檢查 vendor/composer/autoload_classmap.php 有幫你自動寫入路徑。

return array(
    'Jsn\\Cart' => $baseDir . '/Jsn/Cart/lib/Cart.php',
    'Jsn\\Transport' => $baseDir . '/Jsn/Cart/lib/Transport.php',
);

 

測試看看

<?
//若使用 codeigniter 那麼這句應該是交由 config.php 決定,而不需要寫這行
require_once "vendor/autoload.php";

$cart = new Jsn\Cart;
echo $cart->add(); // output: Cart Success

$tra = new Jsn\Transport;
echo $tra->add(); // output: Transport Success

 

 

 

發表迴響