Konfigürasyon Dosyası

Konum

Webman'ın konfigürasyon dosyaları config/ dizininde bulunur. Projede config() fonksiyonu aracılığıyla ilgili konfigürasyona erişim sağlanabilir.

Konfigürasyonu Alma

Tüm konfigürasyonu almak

config();

config/app.php içindeki tüm konfigürasyonları almak

config('app');

config/app.php içindeki debug konfigürasyonunu almak

config('app.debug');

Eğer konfigürasyon bir dizi ise, içindeki elemanların değerine . ile ulaşabilirsiniz, örneğin

config('file.key1.key2');

Varsayılan Değer

config($key, $default);

config ikinci parametre ile varsayılan değeri alır, konfigürasyon yoksa varsayılan değeri döner.
Eğer konfigürasyon yoksa ve varsayılan değer ayarlanmamışsa, null döner.

Özelleştirilmiş Konfigürasyon

Geliştiriciler config/ dizininde kendi konfigürasyon dosyalarını ekleyebilir, örneğin

config/payment.php

<?php
return [
    'key' => '...',
    'secret' => '...'
];

Konfigürasyonu alırken kullanım

config('payment');
config('payment.key');
config('payment.key');

Konfigürasyonu Değiştirme

Webman dinamik konfigürasyon değişikliklerini desteklemez, bu nedenle tüm konfigürasyonlar ilgili konfigürasyon dosyasında manuel olarak değiştirilmelidir ve reload veya restart ile yeniden başlatılmalıdır.

Dikkat
Sunucu konfigürasyonu config/server.php ve süreç konfigürasyonu config/process.php reload'u desteklemez, etkili olabilmesi için restart gereklidir.

Özel Hatırlatma

Eğer konfigürasyonun alt dizininde konfigürasyon dosyası oluşturup okumak istiyorsanız, örneğin: config/order/status.php, bu durumda config/order dizininde bir app.php dosyasına sahip olmanız gerekir. İçeriği şu şekilde olmalıdır:

<?php
return [
    'enable' => true,
];

enable değeri true olduğunda, framework bu dizinin konfigürasyonunu okur.
Sonuçta konfigürasyon dosyası dizin ağaç yapısı aşağıdaki gibi olacaktır:

├── config
│   ├── order
│   │   ├── app.php
│   │   └── status.php

Öyleyse config.order.status ile status.php dosyasındaki dönen dizi veya belirli anahtar verilerine ulaşabilirsiniz.

Konfigürasyon Dosyası Açıklaması

server.php

return [
    'listen' => 'http://0.0.0.0:8787', // Dinleme portu (1.6.0 versiyonundan itibaren kaldırıldı, config/process.php içinde yapılandırılmalı)
    'transport' => 'tcp', // Taşıma katmanı protokolü (1.6.0 versiyonundan itibaren kaldırıldı, config/process.php içinde yapılandırılmalı)
    'context' => [], // ssl gibi konfigürasyonlar (1.6.0 versiyonundan itibaren kaldırıldı, config/process.php içinde yapılandırılmalı)
    'name' => 'webman', // Süreç adı (1.6.0 versiyonundan itibaren kaldırıldı, config/process.php içinde yapılandırılmalı)
    'count' => cpu_count() * 4, // Süreç sayısı (1.6.0 versiyonundan itibaren kaldırıldı, config/process.php içinde yapılandırılmalı)
    'user' => '', // Kullanıcı (1.6.0 versiyonundan itibaren kaldırıldı, config/process.php içinde yapılandırılmalı)
    'group' => '', // Kullanıcı grubu (1.6.0 versiyonundan itibaren kaldırıldı, config/process.php içinde yapılandırılmalı)
    'reusePort' => false, // Port tekrar kullanımının etkin olup olmadığı (1.6.0 versiyonundan itibaren kaldırıldı, config/process.php içinde yapılandırılmalı)
    'event_loop' => '',  // Olay döngüsü sınıfı, varsayılan otomatik seçim
    'stop_timeout' => 2, // stop/restart/reload sinyali alındığında işlemlerin tamamlanması için bekleme süresi, bu süreyi aşarsa süreç zorla kapatılır
    'pid_file' => runtime_path() . '/webman.pid', // pid dosyasının saklanacağı yer
    'status_file' => runtime_path() . '/webman.status', // status dosyasının saklanacağı yer
    'stdout_file' => runtime_path() . '/logs/stdout.log', // Standart çıktı dosyasının yeri, webman başlatıldığında tüm çıktılar bu dosyaya yazılacak
    'log_file' => runtime_path() . '/logs/workerman.log', // workerman log dosyasının yeri
    'max_package_size' => 10 * 1024 * 1024 // Maksimum veri paketi boyutu, 10M. Yüklenen dosya boyutu bu sınırlamaya tabidir
];

app.php

return [
    'debug' => true,  // Debug modunun etkin olup olmadığı, açık olduğunda sayfa hataları çağrı yığınını ve diğer hata ayıklama bilgilerini gösterecek, güvenli bir üretim ortamında debug kapatılmalıdır
    'error_reporting' => E_ALL, // Hata raporlama seviyesi
    'default_timezone' => 'Asia/Shanghai', // Varsayılan zaman dilimi
    'public_path' => base_path() . DIRECTORY_SEPARATOR . 'public', // public dizininin yeri
    'runtime_path' => base_path(false) . DIRECTORY_SEPARATOR . 'runtime', // runtime dizininin yeri
    'controller_suffix' => 'Controller', // Kontrolcü son eki
    'controller_reuse' => false, // Kontrolcülerin yeniden kullanılıp kullanılmayacağı
];

process.php

use support\Log;
use support\Request;
use app\process\Http;
global $argv;

return [
     // webman süreç konfigürasyonu
    'webman' => [ 
        'handler' => Http::class, // Süreç işleme sınıfı
        'listen' => 'http://0.0.0.0:8787', // Dinleme adresi
        'count' => cpu_count() * 4, // Süreç sayısı, varsayılan cpu'nun 4 katı
        'user' => '', // Süreç çalıştıran kullanıcı, düşük seviye bir kullanıcı kullanılmalıdır
        'group' => '', // Süreç çalıştıran kullanıcı grubu, düşük seviye bir kullanıcı grubu kullanılmalıdır
        'reusePort' => false, // reusePort'un etkin olup olmadığı, etkin olduğunda bağlantılar farklı worker süreçlerine eşit dağıtılır
        'eventLoop' => '', // Olay döngüsü sınıfı, boşsa server.event_loop yapılandırmasını otomatik kullanır 
        'context' => [], // Dinleme bağlamı yapılandırması, örneğin ssl
        'constructor' => [ // Süreç işleme sınıfının yapıcı fonksiyonu parametreleri, bu örnekte Http sınıfının yapıcı fonksiyonu
            'requestClass' => Request::class, // İsteğe özel isteği sınıfı
            'logger' => Log::channel('default'), // Log örneği
            'appPath' => app_path(), // app dizininin yeri
            'publicPath' => public_path() // public dizininin yeri
        ]
    ],
    // İzleme süreci, dosya güncellemelerini otomatik yükleme ve bellek sızıntısını tespit etmek için
    'monitor' => [
        'handler' => app\process\Monitor::class, // İşleme sınıfı
        'reloadable' => false, // Mevcut süreçte reload işlemi yapılmaz
        'constructor' => [ // Süreç işleme sınıfı yapıcı fonksiyonu parametreleri
            // İzlenen dizin, çok fazla eklenmemeli, algılama yavaşlayabilir
            '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')),
            // Bu uzantı dosyalarının güncellemeleri izlenecek
            'monitorExtensions' => [
                'php', 'html', 'htm', 'env'
            ],
            // Diğer seçenekler
            'options' => [
                // Dosya izleme özelliği etkin mi, yalnızca linux altında geçerlidir, varsayılan olarak koruma modunda dosya izleme etkin değildir
                'enable_file_monitor' => !in_array('-d', $argv) && DIRECTORY_SEPARATOR === '/',
                // Bellek izleme özelliği etkin mi, yalnızca linux altında geçerlidir
                'enable_memory_monitor' => DIRECTORY_SEPARATOR === '/',
            ]
        ]
    ]
];

container.php

// bir psr-11 bağımlılık enjeksiyon konteyner örneği döner
return new Webman\Container;

dependence.php

// Bağımlılık enjeksiyon konteynerindeki hizmetleri ve bağımlılıkları yapılandırmak için
return [];

route.php


use support\Route;
// /test yolunun yönlendirmesini tanımlama
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 // Varsayılan görünüm işleme sınıfı 
];

autoload.php

// Çerçeve otomatik yüklemek için yapılandırılan dosyalar
return [
    'files' => [
        base_path() . '/app/functions.php',
        base_path() . '/support/Request.php',
        base_path() . '/support/Response.php',
    ]
];

cache.php

// Önbellek yapılandırması
return [
    'default' => 'file', // Varsayılan dosya
    'stores' => [
        'file' => [
            'driver' => 'file',
            'path' => runtime_path('cache') // Önbellek dosyasının saklanacağı yer
        ],
        'redis' => [
            'driver' => 'redis',
            'connection' => 'default' // redis bağlantı ismi, redis.php içindeki yapılandırmaya karşılık gelir
        ],
        'array' => [
            'driver' => 'array' // Bellek önbelleği, yeniden başlatıldığında geçersiz olur
        ]
    ]
};

redis.php

return [
    'default' => [
        'host' => '127.0.0.1',
        'password' => null,
        'port' => 6379,
        'database' => 0,
    ],
];

database.php

return [
 // Varsayılan veritabanı
 'default' => 'mysql',
 // Çeşitli veritabanı yapılandırmaları
 '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 [
    // İstisna işleme sınıfını ayarlama 
    '' => support\exception\Handler::class,
];

log.php

return [
    'default' => [
        'handlers' => [
            [
                'class' => Monolog\Handler\RotatingFileHandler::class, // İşleyici
                'constructor' => [
                    runtime_path() . '/logs/webman.log', // Log adı
                    7, //$maxFiles // 7 gün içinde saklanan log
                    Monolog\Logger::DEBUG, // Log seviyesi
                ],
                'formatter' => [
                    'class' => Monolog\Formatter\LineFormatter::class, // Biçimlendirici
                    'constructor' => [null, 'Y-m-d H:i:s', true], // Biçimlendirme parametreleri
                ],
            ]
        ],
    ],
];

session.php

return [
     // Tip
    'type' => 'file', // veya redis veya redis_cluster
     // İşleyici
    'handler' => FileSessionHandler::class,
     // Yapılandırma
    'config' => [
        'file' => [
            'save_path' => runtime_path() . '/sessions', // Saklama dizini
        ],
        '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', // oturum adı
    'auto_update_timestamp' => false, // Zaman damgasını otomatik güncellemenin etkin olup olmadığı, oturumun süresi dolmaması için
    'lifetime' => 7*24*60*60, // Yaşam süresi
    'cookie_lifetime' => 365*24*60*60, // çerez yaşam süresi
    'cookie_path' => '/', // çerez yolu
    'domain' => '', // çerez alanı
    'http_only' => true, // sadece http erişimi
    'secure' => false, // sadece https erişimi
    'same_site' => '', // SameSite niteliği
    'gc_probability' => [1, 1000], // oturum geri kazanım olasılığı
];

middleware.php

// Ara katmanları ayarlama
return [];

static.php

return [
    'enable' => true, // webman'ın statik dosya erişimini etkinleştirip etkinleştirmediği
    'middleware' => [ // Statik dosya ara katmanları, önbellek stratejisi, çapraz alan ayarları vb. için kullanılabilir
        //app\middleware\StaticFile::class,
    ],
];

translation.php

return [
    // Varsayılan dil
    'locale' => 'zh_CN',
    // Geri dönüş dili
    'fallback_locale' => ['zh_CN', 'en'],
    // Dil dosyalarının saklanma yeri
    'path' => base_path() . '/resource/translations',
];