Merhaba,
Loglama için yaptığım işlemleri trait olarak kullanmak istiyorum. Şu şekilde bir şey düşündüm ama çalıştıramadım.
trait Log
{
public LogOperations $logOperations;
#[Pure] public function __construct()
{
$this->logOperations = new LogOperations();
}
public function logStart(array $options)
{
if ($options["logStatus"]) {
$this->logOperations->logStartMessage(
$options["logChannel"],
$options["onQueueName"],
$options["logSite"],
$options["logInfo"]);
}
}
public function logFinish(array $options)
{
if ($options["logStatus"]) {
$this->logOperations->logFinishMessage(
$options["logChannel"],
$options["onQueueName"],
$options["logSite"],
$options["logInfo"]);
}
}
}
abstract class Integration
{
use Log, Connection;
protected array $options;
protected array $optionsExtra;
protected array $connectionInfo;
public function __construct()
{
}
abstract protected function runTheIntegration($database, $integrationOptions);
}
class OrderCommon extends Integration
{
public function __construct()
{
parent::__construct();
}
protected function runTheIntegration($database = 'mysql', $integrationOptions = [])
{
if ($this->options["logStatus"]) {
$this->logStart($this->options);
}
$connectionStatus = (new SiteConnection(
$this->connectionInfo["siteUrl"],
$this->connectionInfo["username"],
$this->connectionInfo["password"],
$this->options["cacheKey"]))::checkToken();
...
}
}
class OrderOperations extends OrderCommon
{
public function __construct()
{
parent::__construct();
$this->connectionInfo["siteUrl"] = SiteList::site1;
$this->connectionInfo["username"] = ApiUserList::api;
$this->connectionInfo["password"] = ApiUserList::apiPassword;
$this->optionsExtra["datePast"] = null;
$this->optionsExtra["dateNow"] = null;
$this->optionsExtra["workingTimeRange"] = 10;
$this->optionsExtra["changeOrderStatusDayRange"] = -15;
$this->optionsExtra["cacheLockTime"] = 7200;
$this->optionsExtra["orderControlList"] = [];
$this->options["database"] = DatabaseControlManager::sunucu1_veritabani1_customer1_order;
$this->options["cacheKey"] = CacheKeyControlManager::customer1_order;
$this->options["onQueueName"] = QueueNameControlManager::custome1_order;
$this->options["logSite"] = "Customer1";
$this->options["logStatus"] = true;
$this->options["logChannel"] = LogControlManager::customer1LogChannel;
$this->options["siteUrl"] = $this->connectionInfo["siteUrl"];
$this->options["customerClass"] = UyeIslemleri::class;
$this->options["orderStatusList"] = [
1 => SiparisDurumlari::SiparisBekliyor, // Beklemede
2 => SiparisDurumlari::SiparisAlindi, // Onaylandı
3 => SiparisDurumlari::SiparisBeklemeyeAlindi, // Tedarik Ediliyor
4 => SiparisDurumlari::SiparisIptalEdildi, // İptal Edildi
5 => SiparisDurumlari::SiparisPaketleniyor, // Hazırlanıyor
6 => SiparisDurumlari::SiparisKargoyaVerildi, // Kargoya Verildi
7 => SiparisDurumlari::SiparisTeslimEdildi, // Teslim Edildi
10 => SiparisDurumlari::SiparisTeslimEdildi, // Teslim Edildi
11 => SiparisDurumlari::SiparisBekliyor, // Havale - EFT Bekliyor
19 => SiparisDurumlari::SiparisIadeEdildi // İade Edildi
];
}
public function runTheIntegration($database = 'mysql', $integrationOptions = [])
{
$this->options["databaseInfo"] = $database;
$this->optionsExtra["testStatus"] = $integrationOptions["testStatus"] ?? false;
$this->optionsExtra["liveTestStatus"] = $integrationOptions["liveTestStatus"] ?? false;
$this->optionsExtra["testData"] = (isset($integrationOptions["addOneData"]) && !empty($integrationOptions["addOneData"])) ?
[$integrationOptions["addOneData"]] : ["0"];
$this->optionsExtra["addAllData"] = $integrationOptions["addAllData"] ?? false;
$this->optionsExtra["addType"] = $integrationOptions["addType"] ?? 0;
$this->options["logInfo"] = $this->optionsExtra["addType"] > 0 ?
"Sipariş Durum Güncelleme" : "Sipariş Ekleme";
$this->options["integrationInfo"] = $this->optionsExtra["addType"] > 0 ?
IntegrationInfo::updateOrder : IntegrationInfo::addOrder;
parent::runTheIntegration($database, $integrationOptions);
}
Typed property App\Customers\Integration::$logOperations must not be accessed before initialization hatası alıyorum