PHP DIY 系列------框架篇:4. 入口檔案

13sai發表於2020-02-20

回顧

上一節我們完成了從路由解析到資料輸出的過程,並且之前已經完成了Request的編寫,這一節我們寫完入口檔案,真正的將我們的web應用跑起來了。


入口檔案裡需要做些什麼呢?

還記得那個流程圖嗎?

簡單流程圖

我們需要載入配置,例項化Application並執行,並且引入後面可能遇到的一些常量。

<?php

require __DIR__.DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'library'.DIRECTORY_SEPARATOR.'System.php';

// 載入配置
$config = require SF_LIBRARY_PATH.'Config.php';


$config['debug'] = ($config['debug']?? SF_DEBUG);

if ($config['debug']) {
    ini_set("display_errors", "On");
    error_reporting(E_ALL);
}

// composer自動載入
require __DIR__ . '/../vendor/autoload.php';

// 例項化應用並執行
$app = new Library\Application(new Library\Https\Request() ,$config);
$app->run();

知識點:

  1. DIR是PHP的一個魔術常量,可以理解成當前檔案所在路徑。DIRECTORY_SEPARATOR是一個顯示系統分隔符的命令,DIRECTORY_SEPARATOR是PHP的內部常量,不需要任何定義與包含即可直接使用。
  2. ini_set — 為一個配置選項設定值
  3. error_reporting — 設定應該報告何種 PHP 錯誤
<?php

// Turn off all error reporting
error_reporting(0);

// Report simple running errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);

// Reporting E_NOTICE can be good too (to report uninitialized
// variables or catch variable name misspellings ...)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

// Report all errors except E_NOTICE
error_reporting(E_ALL & ~E_NOTICE);

// Report all PHP errors (see changelog)
error_reporting(E_ALL);

// Report all PHP errors
error_reporting(-1);

// Same as error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);

?>

System.php

<?php

// debug預設開啟
defined('SF_DEBUG') or define('SF_DEBUG', true);
// 框架開始執行時間
defined('SF_START_TIME') or define('SF_START_TIME', microtime(true));
// 核心檔案目錄
defined('SF_LIBRARY_PATH') or define('SF_LIBRARY_PATH', __DIR__.DIRECTORY_SEPARATOR);
// 應用目錄
defined('SF_APP_PATH') or define('SF_APP_PATH', __DIR__.DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'app'.DIRECTORY_SEPARATOR);
// 入口目錄
defined('SF_PUBLIC_PATH') or define('SF_PUBLIC_PATH', __DIR__.DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'public'.DIRECTORY_SEPARATOR);

Config.php

<?php
/**
 * 系統配置
 */
return [
    'debug' => true, // 建議開發過程中開啟
];

到這裡,我們的框架已經可以執行起來了。

執行應用

配置Nginx

server {
    listen       80;
    server_name  saif.com;
    # 框架根目錄
    root /Users/sai/Work/www/saif/public;


    location / {
        index index.html index.htm index.php;
        try_files $uri $uri/ /index.php?$query_string;
    }


    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
    }

    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

瀏覽器輸入http://saif.com。

你會看到返回的json陣列:

框架入口

備註:前面3行請忽略,是我瀏覽器的外掛自動加入的。

到這裡,我們已經完成了基礎API框架的開發。

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

分享開發知識,歡迎交流。qq957042781

相關文章