PHPDevs

Projekt obiektowy z Composerem i Twigiem? Czytaj!

Tablice, stringi, pliki - kolejny projekt > Lekcja 5

Dodawanie i usuwanie zadań

Kolejny krok to dodawanie nowych zadań. Wystarczy, że odczytamy z pliku dane i zamienimy JSONa na tablicę (już to mamy - funkcja readFromFile()), a następnie dodamy nowy element, zamienimy znów na JSON i zapiszemy. Proste, nie? Też tak myślę.

A więc zróbmy nową funkcję o nazwie add(), która jako pierwszy argument ma otrzymać treść dodawanego zadania.

functions.php<?php
function add(string $text): array
{
    $tasks = readFromFile();
    $tasks[] = $text;
    return $tasks;
}

To wszystko powinno być już dla Ciebie zrozumiałe. Odczytujemy listę zadań, którą dostajemy w formie tablicy, dodajemy nowy element i zwracamy.

Brakuje tylko zapisu do pliku. Jako że będzie on używany w przynajmniej dwóch miejscach (dodawanie i usuwanie) zróbmy kolejną funkcję.

functions.php<?php
function saveToFile(array $tasks)
{
    $data = json_encode($tasks);
    if (file_put_contents(FILENAME, $data) !== false) {
        echo 'OK!';
    } else {
        echo '! Error writing file.';
    }
}

Mam nadzieję, że również i ten kod rozumiesz, ale w razie czego krótko wytłumaczę. Najpierw tablicę zamieniamy na JSON przy użyciu funkcji json_encode(), a następnie przy użyciu file_put_contents() zapisujemy go do pliku. Warunkiem kontrolnie sprawdzimy czy zapis się powiódł. A skąd wiedziałem, że właśnie taki warunek jest potrzebny? Oczywiście że z dokumentacji, cytując:

Return Values
This function returns the number of bytes that were written to the file, or FALSE on failure.

Pozostaje tylko złożyć to w całość w pliku index.php:

index.php<?php
// switch ...
    case 'add':
        if (!empty($content)) {
            $tasks = add($content);
            saveToFile($tasks);
        } else {
            echo '! Error: Task can\'t be empty.';
        }
        break;

Dodałem też prosty warunek sprawdzający, czy treść zadania nie jest pusta (i gdyby tak się stało wyświetlający komunikat).

Pozostało nam jeszcze usuwanie. Założenie jest takie, że będziemy podawali numer zadania, który jest jednocześnie indeksem w tablicy (zwiększonym o jeden podczas wyświetlania na liście).

No więc zróbmy to - funkcja remove() przyjmująca w argumencie numer zadania do usunięcia. A samo usunięcie konkretnego indeksu to żaden problem, wystarczy użyć unset().

functions.php<?php
function remove(int $number): array
{
    $tasks = readFromFile();
    unset($tasks[$number - 1]);
    return $tasks;
}

Na koniec dodajmy jeszcze co trzeba w pliku index i...

index.php<?php
// switch ...
    case 'remove':
        $tasks = remove($content);
        saveToFile($tasks);
        break;

...gotowe, mamy nasz program!

Rzecz jasna jest to bardzo prosta aplikacja i wiele by tu można dodać. Więcej informacji przy każdym zadaniu (np. data), zabezpieczenie przed powielaniem, sprawdzenie przed usuwaniem czy dane zadanie istnieje - to tylko kilka z pomysłów jakie od razu się nasuwają. Nie będziemy się już jednak tym zajmować. Miał to być głównie projekt edukacyjny i mam nadzieję, że ta rola została spełniona.

Cały gotowy program umieściłem również na GitHubie.

Poprzednia lekcja Dalej

Udostępnij

  • Facebook
  • Twitter
  • Google+

Komentarze