Aplikasi sederhana Todo List

Pada project ini mengimplementasikan sebuah aplikasi todo list berbasis Command Line Interface (CLI). Alasan menggunakan CLI karena pada project ini masih tergolong sederhana dan menggunakan teori PHP dasar sehingga kita tidak membutuhkan web server untuk menjalankan kode PHP di project ini. Berikut cara dan penjelesan singkat dari pembuatan aplikasi todo list ini.

  1. Setelah kita membuat folder project yang pertama kali kita lakukan adalah membuat file dengan nama App.php

  2. Untuk selanjutnya kita buat lagi 1 folder di dalam project todo list kita dan namakan folder tersebut “Model”. Ketika sudah, buat buat file di dalam folder Model dengan nama TodoList.php dan tuliskan code berikut.

    TodoList.php

    <?php
    
    $todoList = [];
    

    variabel $todoList tersebut berguna untuk menampung data yang akan kita inputkan ke dalam todo list kita sehingga kita buat array untuk menampungnya. Array kosong karena kita masih belum menginputkan apa pun untuk mengisi data.

  3. Membuat Business Logic untuk menambah, menghapus dan menampilkan data todo list. Membuat folder bernama BusinessLogic dan membuat 3 file yang bernama AddTodoList.php, RemoveTodoList.php dan ShowTodoList.php di dalam folder tersebut.

    AddTodoList.php

    <?php
    
    function addTodoList(string $todo) {
    	global $todoList;
    	$number = sizeof($todoList) + 1;
    	$todoList[$number] = $todo;
    }
    

    Untuk menambahkan data todo list function addTodoList() dibuat yang di mana parameter string $todo itu berarti variabel $todo itu dikonversikan sebagai data string. Karena data tersebut akan ditampung pada sebuah array, maka kita masukkan variabel $todoList yang berscope global ke fungsi addTodoList(). Untuk variabel $number digunakan untuk memberikan nomor pada data todo list yang kita masukkan. Variabel $number memiliki assigment operator sizeof($todoList) + 1 ini yang akan memberikan urutan nomor sesuai kapan data di masukkan, karena array dimulai dari 0 dan array masih kosong maka + 1 ini akan menghasilkan data pertama jadi bukan data yang berawal dari 0. Untuk $todoList[$number] = $todo ini memberikan output nilai pada variabel $todo berdasarkan dari data yang ditampung di variabel array $todoList beserta urutan nomornya. Berikut outputnya.

    //output
    // 1. Belajar PHP Dasar
    

    RemoveTodoList.php

    <?php
    
    function removeAddTodoList(int $number) : bool {
    	global $todoList;
    
    	if ($number > sizeof($todoList)) {
    		return false;
    	}
    
    	for ($i = $number; $i < sizeof($todoList); $i++) {
    		$todoList[$i] = $todoList[$i + 1];
    	}
    	
    	unset($todoList[sizeof($todoList)]);
    
    	return true;
    }
    

    Ketika hendak menghapus sebuah todo list pada project ini menggunakan input nomor yang berupa data integer di simpan pada variabel int $number dari todo list tersebut. Ketika todo list menyimpan 4 data namun nomor yang dipilih 5 yang berarti lebih dari data yang ditampung maka oleh fungsi removeTodoList() akan dikembalikan false. Sedangkan jika angka lebih kecil maka angka akan diproses pada perulangan dan akan digeser menjadi satu angka di atasnya. Fungsi unset() digunakan untuk menghapus data paling akhir pada todo list yang disimpan.

    ShowTodoList.php

    <?php
    
    function showTodoList() {
    	global $todoList;
    	
    	echo "TODOLIST" . PHP_EOL;
    	
    	foreach ($todoList as $key => $value) {
    		echo "$key . $value" . PHP_EOL;
    	}
    }
    

    foreach() berfungsi untuk perulangan elemen array. Elemen array di dalam variabel array $todoList akan dicetak berdasarkan urutan input. Berikut outputnya.

    //Output
    // 1. Belajar PHP Dasar
    // 2. Belajar PHP OOP
    // 3. Belajar PHP Web
    
  4. Setelah menentukan business logic todo list untuk langkah selanjutnya adalah membuat fitur input yang digunakan untuk menambahkan data yang diinginkan dan menghapus data yang diinginkan. Untuk itu perlu membuat folder bernama “Helper” dan buat 1 file bernama Input.php

    Input.php

    <?php
    
    function input(string $info) : string {
    	echo "$info : ";
    	
    	$result = fgets(STDIN);
    	return trim($result);
    }
    

    Fungsi input() digunakan untuk memasukkan data yang ingin kita jadikan todo list dan terdapat fungsi fgets(STDIN) merupakan standard input yang berfungsi untuk menangkap isi inputan dan menyimpannya di variabel $result. Fungsi trim() berfungsi untuk menghilangkan white space pada output variabel $result.

  5. Setelah input dibuat selanjutnya membuat fungsi untuk menampilkan hasil todo list ketika ditambahkan, dihapus dan tampilan input pilihan seluruh aplikasinya. Maka dari itu buat folder bernama “View”. Dalam folder tersebut buat 3 file yang masing - masing bernama ViewAddTodoList.php, ViewRemoveTodoList.php dan ViewShowTodoList.php.

    ViewShowTodoList.php

    <?php
    
    require_once __DIR__ . "/../Model/TodoList.php";
    require_once __DIR__ . "/../BusinessLogic/ShowTodoList.php";
    require_once __DIR__ . "/../Helper/Input.php";
    require_once __DIR__ . "/../View/ViewAddTodoList.php";
    require_once __DIR__ . "/../View/ViewRemoveTodoList.php";
    
    function viewShowTodoList() {
    	showTodoList();
    
    	echo "MENU" . PHP_EOL;
    	echo "1. Tambah Todo list" . PHP_EOL;
    	echo "2. Hapus Todo list" . PHP_EOL;
    	echo "x. Keluar" . PHP_EOL;
    
    	$pilihan = input("Pilih");
    
    	while (true) {
    		if ($pilihan == "1") {
    			viewAddTodoList();
    		} else if ($pilihan == "2") {
    			viewRemoveTodoList();
    		} else if ($pilihan == "x") {
    			break;
    		} else {
    			echo "Pilihan tidak dimengerti" . PHP_EOL;
    		}
    	}
    	echo "Sampai jumpa lagi";
    }
    

    Buat dulu fungsi ViewShowTodoList() sehingga mengetahui apa saja yang dibutuhkan ketika membuat fungsi tersebut. fungsi showTodoList() berguna untuk menampilkan data - data dari variabel array $todoList yang pernah dibuat di awal. Ketika masih kosong maka tampilan yang akan ditampilkan adalah tulisan “TODOLIST” saja. Kemudian input value disimpan pada variabel $pilihan. Menggunakan perulangan while karena meski kita menambahkan dan menghapus todo list maka tampilan harus ditampilkan secara terus menerus. Break berfungsi untuk memberhentikan proses looping dan keluar dari alur looping tersebut ke program di luar looping. Baru masukkan require_once pada file ViewShowTodoList.php arti dari DIR adalah fitur dari php sendiri untuk absolute path dan ../ adalah untuk menaikkan 1 folder di atas folder kita sekarang. Kemudian code untuk viewAddTodoList() sebagai berikut.

    ViewAddTodoList.php

    <?php
    
    require_once __DIR__ . "/../Model/TodoList.php";
    require_once __DIR__ . "/../Helper/Input.php";
    require_once __DIR__ . "/../BusinessLogic/AddTodoList.php";
    
    function viewAddTodoList() {
    	echo "TAMBAHKAN TODOLIST" . PHP_EOL;
    	
    	$todo = input("Tambahkan (x batalkan)");
    	
    	if ($todo == "x") {
    		echo "Batal menambahkan todo list" . PHP_EOL;
    	} else {
    		addTodoList($todo);
    	}
    }
    

    Input todo list akan ditampung di variabel $todo. Dan ketika $todo terisi selain “x” maka todo akan disimpan dan ditambahkan.

    ViewRemoveTodoList.php

    <?php
    
    require_once __DIR__ . "/../Helper/Input.php";
    reuqire_once __DIR__ . "/../BusinessLogic/RemoveTodoList.php";
    
    function viewRemoveTodoList() {
    	echo "HAPUS TODOLIST" . PHP_EOL;
    
    	$pilihan = input("Nomor (x batalkan)");
    	
    	if ($pilihan == "x") {
    		echo "Batal menghapus todo list" . PHP_EOL;
    	} else {
    		$success = removeAddTodoList($pilihan);
    		
    		if ($success) {
    			echo "Berhasil menghapus todo list nomor $pilihan" . PHP_EOL;
    		} else {
    			echo "Gagal menghapus todo list nomor $pilihan" . PHP_EOL;
    		}
    	}
    }
    
    

    Simpan dahulu fungsi removeTodoList() pada variabel $success. Ketika angka yang dimasukkan melebihi data yang ditampung oleh variabel array $todoList maka program yang akan dieksekusi adalah “Gagal menghapus todo list dengan nomor pilihan”. Setelah semua fungsi dibuat maka kita gunakan fungsi tersebut di file App.php seperti berikut.

    <?php
    
    require_once __DIR__ . "/Model/TodoList.php";
    require_once __DIR__ . "BusinessLogic/AddTodoList.php";
    require_once __DIR__ . "BusinessLogic/RemoveTodoList.php";
    require_once __DIR__ . "BusinessLogic/ShowTodoList.php";
    require_once __DIR__ . "View/ViewShowTodoList.php";
    require_once __DIR__ . "View/ViewAddTodoList.php";
    require_once __DIR__ . "View/ViewRemoveTodoList.php";
    
    echo "App Todo List" . PHP_EOL;
    
    viewShowTodoList();