DIY 實現 ThinkPHP 核心框架(五)Composer

cn-five發表於2020-08-28

什麼是 Composer ?

ComposerPHP 用來管理依賴關係的工具,可以通過它自動安裝這些依賴的庫檔案。此外,Composer 可以實現類的自動載入以及建立自己的包。 Composer 的安裝 非常簡捷。

實現類的自動載入

/home/web/mytp 目錄下建立 composer.json 檔案

{
  "autoload": {
      // 仿 ThinkPHP 構建名稱空間 app
    "psr-4": {"app\\": "application/"}
  }
}

上述程式碼表示自動載入的類檔案須遵循 PSR-4 規範, app\\ 表示名稱空間 appapplication/ 表示 application 目錄,含義為將名稱空間 app 對映到 application 目錄,需要載入名稱空間 app 的類時,在 application 目錄中查詢相應檔案。名稱空間 app 的子名稱空間會對映為 application 目錄下的對應目錄。

         名稱空間                                 目錄
app\index\controller\Index <=> application/index/controller/Index.php

進入到 composer.json 所在目錄,執行 composer install 命令初始化自動載入,並安裝相應依賴關係所需元件。正常情況下輸出

Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Generating autoload files

操作完成後,當前目錄下會生成一個 vendor 目錄,結構如下

vendor
    ├── autoload.php
    └── composer
        ├── autoload_classmap.php
        ├── autoload_namespaces.php
        ├── autoload_psr4.php
        ├── autoload_real.php
        ├── autoload_static.php
        ├── ClassLoader.php
        ├── installed.json
        └── LICENSE

需要更新依賴包或者庫檔案時,只需修改 composer.json 的檔案至需要的版本,再執行 composer update 命令。引入名稱空間機制後,類名無需顯示控制器或者模板的名稱,更改如下

EmployeeController.php => Employee.php
EmployeeModel.php => Employee.php
// 相應檔案中的類名也需要做更改以符合 PSR-4 規範

在入口檔案 index.php 中引入 vendor/autoload.php

<?php
require '../vendor/autoload.php';

編輯 Shell 指令碼 start.sh 實現 NginxPhp-fpm 開機自啟

#!/bin/bash
#chkconfig:2345 80 30
#description:auto_run
#
#

/usr/local/nginx/sbin/nginx
/usr/local/php/sbin/php-fpm
systemctl stop firewalld

新增指令碼到開機自動啟動專案中

chkconfig --add start.sh

訪問 diy.tp/index.php

類的自動載入功能已經實現

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章