Tập tin cấu hình
Vị trí
Tập tin cấu hình của webman nằm trong thư mục config/
, trong dự án có thể sử dụng hàm config()
để lấy các cấu hình tương ứng.
Lấy cấu hình
Lấy tất cả cấu hình
config();
Lấy tất cả cấu hình trong config/app.php
config('app');
Lấy cấu hình debug
trong config/app.php
config('app.debug');
Nếu cấu hình là mảng, có thể sử dụng .
để lấy giá trị của phần tử bên trong mảng, ví dụ
config('file.key1.key2');
Giá trị mặc định
config($key, $default);
config thông qua tham số thứ hai để truyền giá trị mặc định, nếu cấu hình không tồn tại thì trả về giá trị mặc định.
Nếu cấu hình không tồn tại và không có giá trị mặc định được thiết lập thì trả về null.
Cấu hình tùy chỉnh
Các nhà phát triển có thể thêm tập tin cấu hình của riêng mình trong thư mục config/
, ví dụ
config/payment.php
<?php
return [
'key' => '...',
'secret' => '...'
];
Sử dụng khi lấy cấu hình
config('payment');
config('payment.key');
config('payment.key');
Thay đổi cấu hình
webman không hỗ trợ thay đổi cấu hình động, tất cả cấu hình phải được sửa đổi thủ công trong các tập tin cấu hình tương ứng, và cần phải reload hoặc restart để khởi động lại
Lưu ý
Cấu hình máy chủconfig/server.php
và cấu hình tiến trìnhconfig/process.php
không hỗ trợ reload, cần phải restart để có hiệu lực
Nhắc nhở đặc biệt
Nếu bạn muốn tạo tập tin cấu hình trong thư mục con của config và đọc, chẳng hạn: config/order/status.php
, thì thư mục config/order
cần có một tập tin app.php
, nội dung như sau
<?php
return [
'enable' => true,
];
enable
là true
thể hiện việc cho phép framework đọc cấu hình trong thư mục này.
Cuối cùng, cây thư mục của các tập tin cấu hình trông tương tự như dưới đây
├── config
│ ├── order
│ │ ├── app.php
│ │ └── status.php
Bây giờ bạn có thể sử dụng config.order.status
để đọc mảng được trả về trong status.php
hoặc dữ liệu của key cụ thể.
Giải thích tập tin cấu hình
server.php
return [
'listen' => 'http://0.0.0.0:8787', // Cổng lắng nghe (bắt đầu từ phiên bản 1.6.0 đã được loại bỏ, cấu hình trong config/process.php)
'transport' => 'tcp', // Giao thức lớp truyền tải (bắt đầu từ phiên bản 1.6.0 đã được loại bỏ, cấu hình trong config/process.php)
'context' => [], // cấu hình ssl, v.v. (bắt đầu từ phiên bản 1.6.0 đã được loại bỏ, cấu hình trong config/process.php)
'name' => 'webman', // Tên tiến trình (bắt đầu từ phiên bản 1.6.0 đã được loại bỏ, cấu hình trong config/process.php)
'count' => cpu_count() * 4, // Số lượng tiến trình (bắt đầu từ phiên bản 1.6.0 đã được loại bỏ, cấu hình trong config/process.php)
'user' => '', // Người dùng (bắt đầu từ phiên bản 1.6.0 đã được loại bỏ, cấu hình trong config/process.php)
'group' => '', // Nhóm người dùng (bắt đầu từ phiên bản 1.6.0 đã được loại bỏ, cấu hình trong config/process.php)
'reusePort' => false, // Có mở tính năng tái sử dụng cổng hay không (bắt đầu từ phiên bản 1.6.0 đã được loại bỏ, cấu hình trong config/process.php)
'event_loop' => '', // Lớp vòng lặp sự kiện, mặc định tự động chọn
'stop_timeout' => 2, // Khi nhận tín hiệu stop/restart/reload, thời gian tối đa chờ hoàn thành xử lý, nếu quá thời gian này mà tiến trình không thoát thì sẽ buộc phải thoát
'pid_file' => runtime_path() . '/webman.pid', // Vị trí lưu trữ tệp pid
'status_file' => runtime_path() . '/webman.status', // Vị trí lưu trữ tệp status
'stdout_file' => runtime_path() . '/logs/stdout.log', // Vị trí tệp xuất tiêu chuẩn, tất cả xuất sẽ được ghi vào tệp này sau khi webman khởi động
'log_file' => runtime_path() . '/logs/workerman.log', // Vị trí tệp nhật ký workerman
'max_package_size' => 10 * 1024 * 1024 // Kích thước gói dữ liệu tối đa, 10M. Kích thước tệp tải lên bị giới hạn bởi điều này
];
app.php
return [
'debug' => true, // Có mở tính năng debug hay không, nếu mở, lỗi trên trang sẽ xuất ra stack call và thông tin debug khác, để an toàn môi trường sản xuất nên tắt debug
'error_reporting' => E_ALL, // Mức độ báo lỗi
'default_timezone' => 'Asia/Shanghai', // Múi giờ mặc định
'public_path' => base_path() . DIRECTORY_SEPARATOR . 'public', // Vị trí thư mục public
'runtime_path' => base_path(false) . DIRECTORY_SEPARATOR . 'runtime', // Vị trí thư mục runtime
'controller_suffix' => 'Controller', // Tiền tố của controller
'controller_reuse' => false, // Có tái sử dụng controller hay không
];
process.php
use support\Log;
use support\Request;
use app\process\Http;
global $argv;
return [
// Cấu hình tiến trình webman
'webman' => [
'handler' => Http::class, // Lớp xử lý tiến trình
'listen' => 'http://0.0.0.0:8787', // Địa chỉ lắng nghe
'count' => cpu_count() * 4, // Số lượng tiến trình, mặc định là gấp 4 lần cpu
'user' => '', // Người dùng chạy tiến trình, nên sử dụng người dùng cấp thấp
'group' => '', // Nhóm người dùng chạy tiến trình, nên sử dụng nhóm người dùng cấp thấp
'reusePort' => false, // Có mở tính năng reusePort hay không, nếu mở, kết nối sẽ được phân phối đều cho các tiến trình worker khác nhau
'eventLoop' => '', // Lớp vòng lặp sự kiện, nếu rỗng sẽ tự động sử dụng cấu hình server.event_loop
'context' => [], // Cấu hình ngữ cảnh lắng nghe, ví dụ ssl
'constructor' => [ // Tham số hàm khởi tạo lớp xử lý tiến trình, trong ví dụ này là tham số của lớp Http
'requestClass' => Request::class, // Có thể tùy chỉnh lớp yêu cầu
'logger' => Log::channel('default'), // Thực thể nhật ký
'appPath' => app_path(), // Vị trí thư mục app
'publicPath' => public_path() // Vị trí thư mục public
]
],
// Tiến trình giám sát, dùng để phát hiện cập nhật tệp tự động nạp và rò rỉ bộ nhớ
'monitor' => [
'handler' => app\process\Monitor::class, // Lớp xử lý
'reloadable' => false, // Tiến trình hiện tại không thực hiện reload
'constructor' => [ // Tham số hàm khởi tạo lớp xử lý tiến trình
// Thư mục lắng nghe, không nên quá nhiều, sẽ làm chậm quá trình kiểm tra
'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')),
// Lắng nghe các tệp có phần mở rộng này
'monitorExtensions' => [
'php', 'html', 'htm', 'env'
],
// Các tùy chọn khác
'options' => [
// Có mở tính năng giám sát tệp hay không, chỉ có hiệu lực trên linux, chế độ daemon mặc định không mở giám sát tệp
'enable_file_monitor' => !in_array('-d', $argv) && DIRECTORY_SEPARATOR === '/',
// Có mở tính năng giám sát bộ nhớ hay không, chỉ hỗ trợ mở trên linux
'enable_memory_monitor' => DIRECTORY_SEPARATOR === '/',
]
]
]
];
container.php
// Trả về một phiên bản của container phụ thuộc psr-11
return new Webman\Container;
dependence.php
// Dùng để cấu hình các dịch vụ và mối quan hệ phụ thuộc trong container phụ thuộc
return [];
route.php
use support\Route;
// Định nghĩa tuyến đường cho /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 // Lớp xử lý view mặc định
];
autoload.php
// Cấu hình các tệp được tự động tải bởi framework
return [
'files' => [
base_path() . '/app/functions.php',
base_path() . '/support/Request.php',
base_path() . '/support/Response.php',
]
];
cache.php
// Cấu hình bộ nhớ đệm
return [
'default' => 'file', // Tệp mặc định
'stores' => [
'file' => [
'driver' => 'file',
'path' => runtime_path('cache') // Vị trí lưu trữ tệp bộ nhớ đệm
],
'redis' => [
'driver' => 'redis',
'connection' => 'default' // Tên kết nối redis, tương ứng với cấu hình trong redis.php
],
'array' => [
'driver' => 'array' // Bộ nhớ đệm trong bộ nhớ, sẽ hết hiệu lực sau khi khởi động lại
]
]
];
redis.php
return [
'default' => [
'host' => '127.0.0.1',
'password' => null,
'port' => 6379,
'database' => 0,
],
];
database.php
return [
// Cơ sở dữ liệu mặc định
'default' => 'mysql',
// Cấu hình các cơ sở dữ liệu khác nhau
'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 [
// Thiết lập lớp xử lý ngoại lệ
'' => support\exception\Handler::class,
];
log.php
return [
'default' => [
'handlers' => [
[
'class' => Monolog\Handler\RotatingFileHandler::class, // Bộ xử lý
'constructor' => [
runtime_path() . '/logs/webman.log', // Tên nhật ký
7, //$maxFiles // Lưu giữ nhật ký trong 7 ngày
Monolog\Logger::DEBUG, // Mức độ nhật ký
],
'formatter' => [
'class' => Monolog\Formatter\LineFormatter::class, // Bộ định dạng
'constructor' => [null, 'Y-m-d H:i:s', true], // Tham số định dạng
],
]
],
],
];
session.php
return [
// Loại
'type' => 'file', // hoặc redis hoặc redis_cluster
// Bộ xử lý
'handler' => FileSessionHandler::class,
// Cấu hình
'config' => [
'file' => [
'save_path' => runtime_path() . '/sessions', // Thư mục lưu trữ
],
'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', // Tên phiên
'auto_update_timestamp' => false, // Có tự động cập nhật dấu thời gian hay không, tránh phiên hết hạn
'lifetime' => 7*24*60*60, // Thời gian sống
'cookie_lifetime' => 365*24*60*60, // Thời gian sống của cookie
'cookie_path' => '/', // Đường dẫn cookie
'domain' => '', // Miền cookie
'http_only' => true, // Chỉ truy cập qua http
'secure' => false, // Chỉ truy cập qua https
'same_site' => '', // Thuộc tính SameSite
'gc_probability' => [1, 1000], // Xác suất thu hồi phiên
];
middleware.php
// Thiết lập middleware
return [];
static.php
return [
'enable' => true, // Có mở quyền truy cập tệp tĩnh của webman hay không
'middleware' => [ // Middleware cho tệp tĩnh, có thể sử dụng để thiết lập chính sách bộ nhớ đệm, CORS, v.v.
//app\middleware\StaticFile::class,
],
];
translation.php
return [
// Ngôn ngữ mặc định
'locale' => 'zh_CN',
// Ngôn ngữ dự phòng
'fallback_locale' => ['zh_CN', 'en'],
// Vị trí lưu trữ tệp ngôn ngữ
'path' => base_path() . '/resource/translations',
];