ไฟล์การกำหนดค่า
ตำแหน่ง
ไฟล์การกำหนดค่าของ webman อยู่ในไดเร็กทอรี config/
ซึ่งในโปรเจกต์สามารถใช้ฟังก์ชัน config()
เพื่อเรียกค่าการกำหนดค่าที่เกี่ยวข้องได้
การเข้าถึงการกำหนดค่า
เข้าถึงการกำหนดค่าทั้งหมด
config();
เข้าถึงการกำหนดค่าทั้งหมดใน config/app.php
config('app');
เข้าถึงการกำหนดค่า debug
ใน config/app.php
config('app.debug');
หากการกำหนดค่าเป็นอาร์เรย์ สามารถใช้ .
เพื่อเข้าถึงค่าในอาร์เรย์ เช่น
config('file.key1.key2');
ค่าดีฟอลต์
config($key, $default);
ฟังก์ชัน config จะรับค่าเริ่มต้นผ่านพารามิเตอร์ที่สอง หากการกำหนดค่าไม่มี จะส่งค่าที่เป็นค่าเริ่มต้นกลับมา
ถ้าการกำหนดค่าไม่มีและไม่มีการตั้งค่าค่าเริ่มต้นจะส่งกลับเป็น null
การกำหนดค่าที่กำหนดเอง
นักพัฒนาสามารถเพิ่มไฟล์กำหนดค่าของตนเองในไดเร็กทอรี config/
เช่น
config/payment.php
<?php
return [
'key' => '...',
'secret' => '...'
];
เมื่อใช้งานการเข้าถึงการกำหนดค่า
config('payment');
config('payment.key');
config('payment.key');
การเปลี่ยนแปลงการกำหนดค่า
webman ไม่รองรับการเปลี่ยนแปลงการกำหนดค่าแบบไดนามิก ทุกการกำหนดค่าต้องแก้ไขในไฟล์การกำหนดค่าที่เกี่ยวข้องด้วยตนเอง และต้อง reload หรือ restart เพื่อให้การเปลี่ยนแปลงมีผล
หมายเหตุ
การกำหนดค่าเซิร์ฟเวอร์config/server.php
และการกำหนดค่ากระบวนการconfig/process.php
ไม่รองรับ reload ต้อง restart เท่านั้นถึงจะมีผล
การแจ้งเตือนพิเศษ
หากคุณต้องการสร้างไฟล์การกำหนดค่าในไดเร็กทอรีย่อยของ config และอ่าน เช่น config/order/status.php
จะต้องมีไฟล์ app.php
อยู่ในไดเร็กทอรี config/order
โดยมีเนื้อหาดังนี้
<?php
return [
'enable' => true,
];
enable
เป็น true
หมายถึงให้เฟรมเวิร์กอ่านการกำหนดค่าในไดเร็กทอรีนี้
โครงสร้างต้นไม้ของไฟล์การกำหนดสุดท้ายจะมีลักษณะเช่นนี้
├── config
│ ├── order
│ │ ├── app.php
│ │ └── status.php
คุณสามารถอ่านอาร์เรย์ที่ส่งกลับจาก status.php
หรือข้อมูลคีย์เฉพาะผ่าน config.order.status
ได้แล้ว
คำชี้แจงไฟล์การกำหนดค่า
server.php
return [
'listen' => 'http://0.0.0.0:8787', // พอร์ตที่ฟัง(ตั้งแต่รุ่น 1.6.0 เป็นต้นไปจะถูกย้ายไปยัง config/process.php)
'transport' => 'tcp', // โปรโตคอลชั้นส่งข้อมูล(ตั้งแต่รุ่น 1.6.0 เป็นต้นไปจะถูกย้ายไปยัง config/process.php)
'context' => [], // การกำหนดค่า ssl เป็นต้น(ตั้งแต่รุ่น 1.6.0 เป็นต้นไปจะถูกย้ายไปยัง config/process.php)
'name' => 'webman', // ชื่อกระบวนการ(ตั้งแต่รุ่น 1.6.0 เป็นต้นไปจะถูกย้ายไปยัง config/process.php)
'count' => cpu_count() * 4, // จำนวนกระบวนการ(ตั้งแต่รุ่น 1.6.0 เป็นต้นไปจะถูกย้ายไปยัง config/process.php)
'user' => '', // ผู้ใช้(ตั้งแต่รุ่น 1.6.0 เป็นต้นไปจะถูกย้ายไปยัง config/process.php)
'group' => '', // กลุ่มผู้ใช้(ตั้งแต่รุ่น 1.6.0 เป็นต้นไปจะถูกย้ายไปยัง config/process.php)
'reusePort' => false, // เปิดการใช้งานพอร์ตซ้ำหรือไม่(ตั้งแต่รุ่น 1.6.0 เป็นต้นไปจะถูกย้ายไปยัง config/process.php)
'event_loop' => '', // คลาสลูปเหตุการณ์ โดยค่าเริ่มต้นจะเลือกอัตโนมัติ
'stop_timeout' => 2, // เมื่อได้รับสัญญาณ stop/restart/reload เวลาสูงสุดในการรอให้เสร็จสิ้นก่อนจะถูกบังคับให้หยุด
'pid_file' => runtime_path() . '/webman.pid', // ตำแหน่งเก็บไฟล์ pid
'status_file' => runtime_path() . '/webman.status', // ตำแหน่งเก็บไฟล์สถานะ
'stdout_file' => runtime_path() . '/logs/stdout.log', // ตำแหน่งไฟล์เอาท์พุตมาตรฐาน ทุกการเอาท์พุตจะถูกเขียนลงไฟล์นี้หลังจาก webman เริ่มทำงาน
'log_file' => runtime_path() . '/logs/workerman.log', // ตำแหน่งไฟล์บันทึก workerman
'max_package_size' => 10 * 1024 * 1024 // ขนาดข้อมูลสูงสุด 10M ขนาดไฟล์ที่อัปโหลดจะอยู่ภายใต้การจำกัดนี้
];
app.php
return [
'debug' => true, // เปิดโหมด debug หรือไม่ หากเปิดจะมีการแสดงสแต็กการเรียกใช้งานในกรณีผิดพลาด เพื่อความปลอดภัยในสภาพแวดล้อมการผลิตควรปิดโหมด debug
'error_reporting' => E_ALL, // ระดับการรายงานข้อผิดพลาด
'default_timezone' => 'Asia/Shanghai', // โซนเวลาที่ตั้งเป็นค่าเริ่มต้น
'public_path' => base_path() . DIRECTORY_SEPARATOR . 'public', // ตำแหน่งไดเร็กทอรี public
'runtime_path' => base_path(false) . DIRECTORY_SEPARATOR . 'runtime', // ตำแหน่งไดเร็กทอรี runtime
'controller_suffix' => 'Controller', // คำต่อท้ายของคอนโทรลเลอร์
'controller_reuse' => false, // คอนโทรลเลอร์สามารถนำกลับมาใช้ใหม่ได้หรือไม่
];
process.php
use support\Log;
use support\Request;
use app\process\Http;
global $argv;
return [
// การกำหนดค่ากระบวนการ webman
'webman' => [
'handler' => Http::class, // คลาสจัดการกระบวนการ
'listen' => 'http://0.0.0.0:8787', // ที่อยู่ที่ฟัง
'count' => cpu_count() * 4, // จำนวนกระบวนการเริ่มต้นที่สูงกว่าตัวประมวลผล 4 เท่า
'user' => '', // ผู้ใช้ที่รันกระบวนการ ควรใช้ผู้ใช้ระดับต่ำ
'group' => '', // กลุ่มผู้ใช้ที่รันกระบวนการ ควรใช้กลุ่มผู้ใช้ระดับต่ำ
'reusePort' => false, // เปิดการใช้งาน reusePort หรือไม่ หากเปิดการเชื่อมต่อจะกระจายไปยังกระบวนการ worker ต่างๆ
'eventLoop' => '', // คลาสลูปเหตุการณ์ จะใช้อัตโนมัติตามการกำหนดค่า server.event_loop
'context' => [], // การกำหนดค่าบริบทการฟัง เช่น ssl
'constructor' => [ // พารามิเตอร์ของตัวสร้างคลาสจัดการกระบวนการ ในตัวอย่างนี้คือพารามิเตอร์ของคลาส Http
'requestClass' => Request::class, // สามารถกำหนดคลาสคำขอเองได้
'logger' => Log::channel('default'), // อินสแตนซ์บันทึก
'appPath' => app_path(), // ตำแหน่งไดเร็กทอรีแอป
'publicPath' => public_path() // ตำแหน่งไดเร็กทอรี public
]
],
// กระบวนการตรวจสอบ ใช้เพื่อตรวจจับการอัปเดตไฟล์และโหลดโดยอัตโนมัติ รวมถึงการรั่วไหลของหน่วยความจำ
'monitor' => [
'handler' => app\process\Monitor::class, // คลาสจัดการ
'reloadable' => false, // กำหนดว่ากระบวนการปัจจุบันไม่ทำการ reload
'constructor' => [ // พารามิเตอร์ของตัวสร้างคลาสจัดการกระบวนการ
// ไดเร็กทอรีที่ต้องติดตาม ไม่ควรมากเกินไป เนื่องจากจะทำให้การตรวจสอบช้าลง
'monitorDir' => array_merge([
app_path(),
config_path(),
base_path() . '/process',
base_path() . '/support',
base_path() . '/resource',
base_path() . '/.env',
], glob(base_path() . '/plugin/*/app'), glob(base_path() . '/plugin/*/config'), glob(base_path() . '/plugin/*/api')),
// ติดตามการอัปเดตของไฟล์ที่มีนามสกุลเหล่านี้
'monitorExtensions' => [
'php', 'html', 'htm', 'env'
],
// ตัวเลือกอื่นๆ
'options' => [
// เปิดการตรวจสอบไฟล์หรือไม่ ใช้ได้เฉพาะใน linux โหมด daemon จะไม่มีการเปิดการตรวจสอบไฟล์
'enable_file_monitor' => !in_array('-d', $argv) && DIRECTORY_SEPARATOR === '/',
// เปิดการตรวจสอบหน่วยความจำหรือไม่ รองรับเฉพาะใน linux
'enable_memory_monitor' => DIRECTORY_SEPARATOR === '/',
]
]
]
];
container.php
// ส่งคืนอินสแตนซ์คอนเทนเนอร์การฉีดยา psr-11
return new Webman\Container;
dependence.php
// ใช้สำหรับการกำหนดค่าเซอร์วิสและความสัมพันธ์ของการฉีดยาในคอนเทนเนอร์
return [];
route.php
use support\Route;
// กำหนดเส้นทางสำหรับเส้นทาง /test
Route::any('/test', function (Request $request) {
return response('test');
});
view.php
use support\view\Raw;
use support\view\Twig;
use support\view\Blade;
use support\view\ThinkPHP;
return [
'handler' => Raw::class // คลาสจัดการวิวนั้นๆ
];
autoload.php
// กำหนดไฟล์ที่ต้องอัตโนมัติในการโหลด
return [
'files' => [
base_path() . '/app/functions.php',
base_path() . '/support/Request.php',
base_path() . '/support/Response.php',
]
];
cache.php
// การกำหนดค่าการแคช
return [
'default' => 'file', // ไฟล์เริ่มต้น
'stores' => [
'file' => [
'driver' => 'file',
'path' => runtime_path('cache') // ตำแหน่งเก็บไฟล์แคช
],
'redis' => [
'driver' => 'redis',
'connection' => 'default' // ชื่อการเชื่อมต่อ redis ตรงกับการกำหนดค่าใน redis.php
],
'array' => [
'driver' => 'array' // แคชในหน่วยความจำ จะหมดอายุเมื่อรีสตาร์ท
]
]
];
redis.php
return [
'default' => [
'host' => '127.0.0.1',
'password' => null,
'port' => 6379,
'database' => 0,
],
];
database.php
return [
// ฐานข้อมูลเริ่มต้น
'default' => 'mysql',
// การกำหนดค่าฐานข้อมูลต่างๆ
'connections' => [
'mysql' => [
'driver' => 'mysql',
'host' => '127.0.0.1',
'port' => 3306,
'database' => 'webman',
'username' => 'webman',
'password' => '',
'unix_socket' => '',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
'sqlite' => [
'driver' => 'sqlite',
'database' => '',
'prefix' => '',
],
'pgsql' => [
'driver' => 'pgsql',
'host' => '127.0.0.1',
'port' => 5432,
'database' => 'webman',
'username' => 'webman',
'password' => '',
'charset' => 'utf8',
'prefix' => '',
'schema' => 'public',
'sslmode' => 'prefer',
],
'sqlsrv' => [
'driver' => 'sqlsrv',
'host' => 'localhost',
'port' => 1433,
'database' => 'webman',
'username' => 'webman',
'password' => '',
'charset' => 'utf8',
'prefix' => '',
],
],
];
exception.php
return [
// กำหนดคลาสจัดการข้อยกเว้น
'' => support\exception\Handler::class,
];
log.php
return [
'default' => [
'handlers' => [
[
'class' => Monolog\Handler\RotatingFileHandler::class, // ตัวจัดการ
'constructor' => [
runtime_path() . '/logs/webman.log', // ชื่อไฟล์บันทึก
7, //$maxFiles // เก็บเฉพาะบันทึกภายใน 7 วัน
Monolog\Logger::DEBUG, // ระดับบันทึก
],
'formatter' => [
'class' => Monolog\Formatter\LineFormatter::class, // ตัวจัดรูปแบบ
'constructor' => [null, 'Y-m-d H:i:s', true], // พารามิเตอร์จัดรูปแบบ
],
]
],
],
];
session.php
return [
// ประเภท
'type' => 'file', // หรือ redis หรือ redis_cluster
// ตัวจัดการ
'handler' => FileSessionHandler::class,
// กำหนดค่า
'config' => [
'file' => [
'save_path' => runtime_path() . '/sessions', // ตำแหน่งเก็บข้อมูล
],
'redis' => [
'host' => '127.0.0.1',
'port' => 6379,
'auth' => '',
'timeout' => 2,
'database' => '',
'prefix' => 'redis_session_',
],
'redis_cluster' => [
'host' => ['127.0.0.1:7000', '127.0.0.1:7001', '127.0.0.1:7001'],
'timeout' => 2,
'auth' => '',
'prefix' => 'redis_session_',
]
],
'session_name' => 'PHPSID', // ชื่อ session
'auto_update_timestamp' => false, // อัปเดต timestamp อัตโนมัติหรือไม่ ป้องกัน session หมดอายุ
'lifetime' => 7*24*60*60, // อายุการใช้งาน
'cookie_lifetime' => 365*24*60*60, // อายุการใช้งานของคุกกี้
'cookie_path' => '/', // เส้นทางคุกกี้
'domain' => '', // โดนัลด์คุกกี้
'http_only' => true, // เข้าถึงได้เฉพาะ http
'secure' => false, // เข้าถึงได้เฉพาะ https
'same_site' => '', // คุณสมบัติ SameSite
'gc_probability' => [1, 1000], // ความน่าจะเป็นการเก็บข้อดี
];
middleware.php
// กำหนด middleware
return [];
static.php
return [
'enable' => true, // เปิดใช้งานการเข้าถึงไฟล์สถิตของ webman หรือไม่
'middleware' => [ // middleware สำหรับไฟล์สถิติ สามารถใช้ในการกำหนดกลยุทธ์การแคช การข้ามโดเมน เป็นต้น
//app\middleware\StaticFile::class,
],
];
translation.php
return [
// ภาษาเริ่มต้น
'locale' => 'zh_CN',
// ภาษาเบื้องหลัง
'fallback_locale' => ['zh_CN', 'en'],
// ตำแหน่งเก็บไฟล์ภาษา
'path' => base_path() . '/resource/translations',
];