Konsol Komutları


    × Bunları biliyor muydunuz?
"External/ dizini tüm projeleriniz için ortak dosya kullanımı sunar."


İşletim sistemlerinde terminal üzerinden komut çalıştırmak için geliştirilmiştir.

 

 

# Kurulum


ZN dağıtımları için kurulum gerekmez.

↓ composer require znframework/package-console

 

 

# Söz Dizimi


php zerocore [project-name] command [parameters]
Php yolu. Kök dizindeki zerocore dosyasının yolu. ZN FE ve ZN OE dağıtımlarında Projects/ dizini içerisinde yer alan ön tanımlı proje dizini (Frontend) dışında farklı bir proje üzerinde komut çalıştırmanız gerektiği durumda kullanır.  Komutlardan herhangi biri. Varsa parametreler.
Genel Komutlar

Aşağıda sistem genelinde ki tüm yapılara ulaşabilmeyi sağlayan komutlar yer almaktadır. 

php zerocore [project-name ProjectName] run-command command:method p1 p2 p 3 ... pN
php zerocore [project-name ProjectName] run-uri controller/function/p1/p2 ... /pN
php zerocore [project-name ProjectName] run-controller controller/function
php zerocore [project-name ProjectName] run-class controller:function p1 p2 ... pN
php zerocore [project-name ProjectName] run-model model:function p1 p2 p3 ... pN   
php zerocore [project-name ProjectName] run-function function p1 p2 p 3 ... pN

Tema Entegrasyon Komutları

Aşağıda tema entegrasyon işlemini başlatmak için kullanılan komutlar yer alır.

php zerocore run-butcher
php zerocore run-butcher-delete

Sürüm Yükseltme Komutları

Aşağıda ZN Framework sürümün yükseltme komutları yer almaktadır.

php zerocore upgrade

Aşağıdaki komut son yapılan upgrade işlemini geri almak için kullanılır.

php zerocore undo-upgrade

Zamanlanmış Görev Komutları

Aşağıda Crontab ile zamanlanmış görev yönetimi komutları yer almaktadır.

php zerocore [project-name ProjectName] run-cron controller/method time1 value1 ...
php zerocore [project-name ProjectName] cron-list
php zerocore [project-name ProjectName] remove-cron cronID

Biçimlendirme Komutları

Aşağıda generate kütüphanesinin yeteneklerini kullanan komutlar yer almaktadır.

php zerocore create-project project name
php zerocore delete-project project name
php zerocore [project-name ProjectName] create-controller controller name
php zerocore [project-name ProjectName] delete-controller controller name
php zerocore [project-name ProjectName] create-model model name
php zerocore [project-name ProjectName] create-grand-model model name
php zerocore [project-name ProjectName] delete-model model name
php zerocore [project-name ProjectName] create-grand-vision [database name]
php zerocore [project-name ProjectName] delete-grand-vision [database name]
php zerocore [project-name ProjectName] generate-databases
php zerocore [project-name ProjectName] clean-cache

Terminal Komutları

Yukarıdakı kullanımların dışında kalan standart terminal komutlarını kullanabilirsiniz.

composer require monolog/monolog

 

 

# run-command


Konsol kullanarak Projects/ProjectDirectory/Commands/ dizini altındaki komut sınıflarını çalıştırmak için kullanılır. Komut dosyalar terminal üzerinden çalıştırılabileceği gibi Async:: sınıf ile kontrolcüler üzerinden de tetiklenebilir.

Dikkat: Komut dosyalarında Başlangıç Kontrolcüleri (Initialize) devreye girmez. Ayrıca komut dosyası içerisinde çağrılması gerekir.
Dikkat: Komut dosylarında Başlangıç Dosyaları (Starting Files) oto yüklenmez include ile dahil edilmesi gerekir.

Yukarıda belirtilen istisnalar dışında tüm sistem, kullanıcı ve composer kütüphanelerine doğrudan erişim sağlanabilir.

 File: Commands/ExampleCommand.php
<?php namespace Project\Commands;

use Email;

class ExampleCommand extends Command
{
   public function run($to)
   {
        Email::to($to)->send('Subject', 'Message');
   }
}
php zerocore run-command ExampleCommand:run [email protected]
Kısa Kullanım

Yukarıdaki kullanımın kısa formudur.

php zerocore ExampleCommand:run [email protected]
External Komut Dosyası Çalıştırma
php zerocore run-external-command ExampleCommand:run [email protected]
Asenkron Komut Dosyası Çalıştırma [8.3.0][2023-06-15]

Yazılan komutları PHP üzerinden asenkron olarak çalıştırmakta mümkündür. Bunun için Async:: sınıf geliştirilmiştir. Bu sınıf sayesinde ön tarafta herhangi bir geçikmeye olmazken işlemler arkaplanda devam eder. Özellikle e-posta gönderimi gibi geçikmeye neden olan işlemler için kullanışlıdır.

Yöntemler
Async::run(string $command, array $data) : string
Async::process(string $procId, callable $callable, bool $displayError = false) : void
Async::displayError(string $errorFile) : string
Async::report(array $data = []) : int
Async::setProcDirectory(string $directory) : this
Async::getProcId() : string
Async::status(string ...$procIds) : array
Async::isFinish(string ...$procIds) : bool

Run

İlgili komut dosyasına çalıştırma isteği gönderir. 

string $command
Çalıştırılacak Commands/Command.php dosyası.
array $data = []
İlgili komut dosyasına gönderilecek datalar. Gönderilecek datalar scalar|array türden olabilir. Gönderilen datalar bir dosya üzerine yazıldığından callable vb. türde verilerin gönderilebilmesi mümkün değildir.
return string
İlgili işlemin ID'sini döndürür. ID bilgisi '64d20043cecbf' buna benzer eşsiz bir dosya adıdır.
Dosya: Controllers/Example.php

Komut çalıştırma isteği ve beraberinde gönderilecek parametreler ilgili kontrolcüye yazılır. Bu yöntem çalıştırıldıktan sonra ilgili işlemle ilgili dosya Id bilgisi döndürür. Bu bilgiyi daha sonra işlemlerin tamamlanıp tamamlanmadığını kontrol etmek için kullanabilirsiniz.

public function main()
{
    $procId = Async::run('SendMail:run',
    [
        'email'   => '[email protected]',
        'title'   => 'Example',
        'content' => 'Example Content'
    ]);
}
Uyarı: Config/Services.php:processor->path yapılandırması değiştirilmediği sürece komut sunucunun php'si üzeride yürütülür. Herhangi bir yapılandırma sorunu yaşanmaması için bu yolu mevcut php(c:\\php\php.exe) ile değiştirilmesi faydalı olacaktır.

Process

Arkaplanda işleyecek kodlar. 

string $procId
İşlem ID bilgisi. Bu bilgi aslında ilgili işlemin verilerinin yer aldığı dosya adıdır. Ve her işlem için eşsiz bir işlem dosyası oluşturulur. İşlemin başarı ile tamamlanmasından sonra bu dosya kendiliğinden silinir.
callable $callable Çalıştırılacak kodların yazılacağı parametre.
bool $displayError = false
[8.5.0][2023-08-08] Arkaplanda yürütme isteği sonrası oluşabilecek hataların {procId}-error formatında bir dosyaya yazılıp yazılmayacağı. Bu değerin true olarak ayarlanması oluşan hataların daha kolay farkedilmesi adına tavsiye edilir.
Dosya: Commands/SendMail.php
public function run($procId)
{
    Async::process($procId, function($data)
    {
         try
         {
              Email::to($data['email'])->send($data['title'], $data['content']);
         }
         catch( Exception $e )
         {
              Async::report(['error' => $e->getMessage()]);
         } 
    });
}

Kodun çalışması dışında oluşacak hataları raporlamak için Async::report() yöntemi kullanılır. Bu yöntem herhangi bir değişiklik yapılmamışsa FILES_DIR sabitinin gösterdiği dizine procId-report formunda bir dosya oluşturur.

Bilgi: $data parametresi içerisinden işlemin durumu ile ilgili 'satus' anahtarlı bir durum dizisi saklar.  
Uyarı: $procId eşsiz işlem anahtarıdır ve sıraya alınan işlemlerin bir birinden ayrılması için gereklidir. 
Dikkat: Komut dosyalarının çalışması esnasında Starting dosyaları ve Başlangıç kontrolcüleri devreye girmez. Bu nedenle e-posta ve veritabanı gibi ayarların ayrıca ilgili komut dosyasında yapılandırılması gerekir.
DisplayError Parametresi [8.5.0][2023-08-08]

Async::process() yönteminin 3. parametresinin true olarak ayarlanması durumunda arkaplanda çalışan kod üzerinde oluşan denetlenebilir hataların  procId-error dosyasına yazılmasını sağlar. Böylece hatanın neyden kaynaklandığının tespitinde kolaylık sağlanmış olur.

DisplayError [8.6.0][2023-08-08]

$displayError parametresi true olan işlemlerde gerçekleşen hataların yazdılığı dosyanın içeriğinin anlaşılabilir şekilde görüntülenmesini sağlar. 

string $errorFile
Hata içeriği gösterilecek işlemin hata dosyası adı.
return string Hata içeriği.
Dosya: Controllers/DisplayError.php
public function main()
{
    $errorFile = '64d20043cecbf-error';

    echo Async::displayError($errorFile); 

    exit;
}

Yukarıda yer alan örnekteki gibi bir kontrolcü yardımı ile ilgili hata dosyasının görüntülenmesini sağlayabilirsiniz.

SetProcDirectory

İşlem dosyaları varsayılan olarak FILES_DIR sabitinin gösterdiği konuma kaydeder. Bunu değiştirmek için bu yöntemden yararlanılır. Bu yöntemle konum değiştirmenin tüm işlemleri etkilemesi isteniyorsa başlangıç kontrolcüsü içerisinde kullanılabilir.

string $location
Hata içeriği gösterilecek işlemin hata dosyası adı.
return this
Dosya: Controllers/Initialize.php
public function main()
{
    Async::setProcDirectory(FILES_DIR . 'procs/');
}

Yukarıda yer alan örneğe göre artık ilgili işlem dosyalarının yolu Projects/Frontend/Resources/Files/procs/ dizini olacaktır.

Status

İşlem ID'lerine göre işlemi devam edenleri dizi türünde döndür. Yani istekten sonra işlemi hala devam ediyor olanları listeler. Bu yöntemin doğru kullanımı asenkron çalıştırma başladıktan sonra bir ajax isteği ile belli bir perioda bu yöntemin sonucunun istenmesi şeklinde olacaktır.

string ...$procId
Durumu kontrol edilecek işlem ID veya ID'ler.
return array Durumu devam eden işlemleri [$file1 => 1, $file2 => 2] biçiminde gösteren dizi döndürür.
Dosya: Controllers/AjaxProcessComplete.php
public function status() : void
{
    $status = Async::status(...Post::procIds()); 

    echo in_array(1, $status); # İçinde tamamlanmamış olan var mı?
}

$status işlemi devam edenleri listeyelen aşağıdaki gibi bir dizi üretir.

[
    'process-file-1' => 1,
    'process-file-2' => 1
]

IsFinish

İşlem ID'lerine göre işlemlerin bitip bitmediğini döndürür. İşlemlerin hepsi bitmişse true en az biri bile bitmemişse false değeri döndürür. Bu yöntemin doğru kullanımı asenkron çalıştırma başladıktan sonra bir ajax isteği ile belli bir perioda bu yöntemin sonucunun istenmesi şeklinde olacaktır.

string ...$procId
Durumu kontrol edilecek işlem ID veya ID'ler.
return bool Durumu devam eden işlem varsa false yoksa true türünde değer döndürür.
Dosya: Controllers/AjaxProcessComplete.php
public function isFinish() : void
{
    echo Async::isFinish(...Post::procIds());
}

 

 

# run-uri / run-controller


Konsoldan kontrolcü çalıştırmak için kullanılır.

php zercore run-uri comments/view

Eğer farklı bir proje kontrolcüsüne istek yapılmak isternirse aşağıdaki gibi kullanılabilir.

php zerocore project-name OthersProject run-uri comments/view

 

 

# run-class / run-model


Konsoldan kütüphane çalıştırmak için kullanılır.

php zerocore run-class Migration:create Blog 1
php zerocore run-class MigrateBlog:up
php zerocore run-class MigrateBlog:down
php zercore run-class Migation:delete Blog

 

 

# run-function


Konsoldan fonkisyon çalıştırmak için kullanılır.

php zerocore run-function exampleFunction

 

 

# run-external-command


Konsol kullanarak Projects/ProjectDirectory/Commands/ dizini altındaki komut sınıflarını çalıştırmak için kullanılır. Kontrolcü üzerinden çalıştırmayı denerseniz hata ile karşılaşırsınız. Bu yapı sadece konsol üzerinden yapılan isteklerle çalışır.

File: External/Commands/ExampleCommand.php
<?php namespace External\Commands;

use Email;

class ExampleCommand extends Command
{
   public function run($to)
   {
        Email::to($to)->send('Subject', 'Message');
   }
}
php zerocore run-external-command ExampleCommand:run [email protected]
Kısa Kullanım

Yukarıdaki kullanımın kısa formudur.

php zerocore External\ExampleCommand:run [email protected]

 

 

# upgrade


Framework'ü güncellemek için kullanılır. Güncelleme başarılı olursa mesaj verir. Başarılı olmazsa herhangi bir çıktı üretmez.

php zerocore upgrade

 

 

# undo-upgrade


Gerçekleştirilen son yükseltme işlemini geri almak için oluşturulmuştur. Yükseltmenin istenmeyen bir çalışma biçimine neden olması durumunda bu komut ile yükseltmeyi geri alabilirsiniz.

php zerocore undo-upgrade

 

 

# run-cron


Crontab kütüphanesi ve yöntemlerini çalıştırmak için kullanılır. Bu komutla controller, command ve url çalıştırılabilir.

php zerocore run-cron home/main month october day saturday clock 12:00
php zerocore run-cron EmailCommand:sendMail daily
php zerocore run-cron http://example.com/ day monday clock 10:30

 

 

# cron-list


Zamanlanmış görevlerin listesini verir.

php zerocore cron-list

 

 

# remove-cron


Zamanlanmış görevi silmek için kullanılır. Silme işlemi silinecek görevin cron-list'deki id değerine göre yapılır.

php zerocore remove-cron 1

 

 

# create-project


Multi-edition'da Projects/ dizinine yeni bir proje açmak için kullanılır.

php zerocore create-project NewProject

 

 

# delete-project


Multi-edition'da Projects/ dizininde ki belirtilen projeyi silmek için kullanılır.

php zerocore delete-project NewProject

 

 

# create-controller


Kontrolcü oluşturmak için kullanılır. Proje adı belirtilmezse varsayılan proje dizini(Genellikle Frontend/) içerisinde yer alan Controllers/ dizini içerisinde bu işlem gerçekleşir.

php zerocore create-controller MyController
Bir Başka Proje Dizininde Kontrolcü Oluşturma

Varsayılan proje dışında farklı bir proje dizininde bu kontrolcüyü oluşturmak için komut aşağıdaki gibi düzenlenir.

php zerocore project-name Backend create-controller MyController

 

 

# delete-controller


Kontrolcü silmek için kullanılır.

php zerocore delete-controller MyController

 

 

# create-model


Model oluşturmak için kullanılır. Proje adı belirtilmezse varsayılan proje dizini(Genellikle Frontend/) içerisinde yer alan Models/ dizini içerisinde bu işlem gerçekleşir.

php zerocore create-model MyModel
Bir Başka Proje Dizininde Model Oluşturma

Varsayılan proje dışında farklı bir proje dizininde bu modeli oluşturmak için komut aşağıdaki gibi düzenlenir.

php zerocore project-name Backend create-model MyModel

 

# create-grand-model


Grand Model oluşturmak için kullanılır. Model sınıfı GrandModel sınıfı ile genişletilerek oluşturulur.

php zerocore create-grand-model MyModelGrand

 

 

# delete-model


Modeli silmek için kullanılır.

php zerocore delete-model MyModel

 

 

# create-grand-vision


Veritabanının tüm tabloları ile aynı isimle GrandModel sınıfları oluşturmak için kullanılır. Veritabanı adı belirtilmezse varsayılan olarak ayarlanan veritabanı adı kabul edilir.

php zerocore create-grand-vision
Veritabanı Belirtme

Varsayılan veritabanı dışında başka bir veritabanına ait tablolardan model dosyaları oluşturmak için kullanılır.

php zerocore create-grand-vision OtherDatabase

 

 

# delete-grand-vision


Oluşturulan vizyon modellerini silmek için kullanılır.

php zerocore delete-grand-vision OtherDatabase

 

 

# generate-databases


Databases/ dizinine tasarladığınız yapının işlenmesini sağlar.

php zerocore generate-databases

 

 

# clean-cache


Storate/Cache/ dizininin temizlenmesini sağlar.

php zerocore clean-cache