回顧
上一節我們完成了從路由解析到資料輸出的過程,並且之前已經完成了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();
知識點:
- DIR是PHP的一個魔術常量,可以理解成當前檔案所在路徑。DIRECTORY_SEPARATOR是一個顯示系統分隔符的命令,DIRECTORY_SEPARATOR是PHP的內部常量,不需要任何定義與包含即可直接使用。
- ini_set — 為一個配置選項設定值
- 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 協議》,轉載必須註明作者和本文連結