Görev (Task)
Paket yükleme&kaldırma ve benzeri tüm uzun süren işlemleri arkaplanda çalıştırıp arayüzde çıktıları göstermeyi kolaylaştıran Task(Görev) componentini öğreneceğiz.
Eklentinizde bazı durumlarda uzun süren işlemler yaptırmanız gerekebilir. Bu gibi durumlarda Task componentini kullanabilirsiniz.
- OOP eklenti klasör yapısında öncelikle app klasöründe
Tasks
isminde bir klasör oluşturuyoruz veInstallPackage.php
dosyası oluşturuyoruz. - Task soyut sınıfındaki değişkenleri yaptıracağımız işe göre override ediyoruz.
<?php
namespace App\Tasks;
use Liman\Toolkit\Formatter;
use Liman\Toolkit\RemoteTask\Task;
class InstallPackage extends Task
{
protected $command = "DEBIAN_FRONTEND=noninteractive apt install @{:package} -qqy";
protected $sudoRequired = true;
protected $control = "apt\|dpkg";
public function __construct(array $attributes = []){
if(!isset($attributes["package"])){
throw new \Exception("Package name is required");
}
$this->attributes = $attributes;
$this->logFile = Formatter::run(
"/tmp/install-package-{:package}.txt",
["package" => $attributes["package"]]
);
$this->checkCommand = Formatter::run(
"apt list --installed | grep {:package}",
["package" => $attributes["package"]]
);
}
}
Değişken | Tip | Açıklama |
$command | string | Çalıştırılacak komut metni. |
$logFile | string | Komutun çıktılarının saklanacağı konum. |
$sudoRequired | boolean | Sudo gerekli ise true olmalıdır. (opsiyonel) |
$control | string | İşlemin bitip bitmediğini anlamak için gerekli grep kontrol deseni. |
$attributes | array | Komut metninde değişken kullandıysanız değişkenlerin değerlerinin tanımlanması gereken dizi. (opsiyonel) |
$checkCommand | string | İşlemin başarıyla bitip bitmediğinin kontrolünü sağlayan komut. (opsiyonel) |
- Controller içerisinde bir fonksiyon tanımlıyoruz ve routes.php içerisinde gerekli tanımlamaları yapıyoruz.
public function installPackage()
{
validate([
'package_name' => 'required|string',
]);
return respond(
view('task', [
'tasks' => [
0 => [
'name' => 'InstallPackage',
'attributes' => [
'package' => request('package')
]
]
]
]),
200
);
}
- Bu fonksiyon geriye task componentini çalıştırmanız için gerekli HTML verisini döndürür.
- Birden fazla task
tasks
dizisi içerisinde tanımlanabilir böyle bir durumda görevler kuyruklanır ve sırayla çalıştırılır.
- Tercihe bağlı olarak Görev componenti bir Modal içerisinde gösterilebilir.
@component('modal-component',[
"id" => "taskModal",
"title" => "Görev İşleniyor",
])
@endcomponent
- Bu şekilde bir modal tanımlanabilir.
function installPackage(package_name){
showSwal('{{__("Yükleniyor...")}}', 'info');
let formData = new FormData();
formData.append("package_name", package_name);
request("{{API('install_package')}}", formData, function(response){
$('#taskModal').find('.modal-body').html(JSON.parse(response).message);
$('#taskModal').modal("show");
Swal.close();
}, function(response){
let error = JSON.parse(response);
showSwal(error.message, 'error', 2000);
});
}
- Görevi başlatmak için de bu şekilde javascript ile ajax çağrısı yapılır ve Task modal'ının içerisine eklenir.
Last modified 1yr ago