HOME > PHP

Jak stworzyć formularz w Laravel 9 i zapisać dane do bazy danych

Aby utworzyć formularz w Laravel 9 i zapisać dane do bazy danych, należy wykonać następujące kroki:

  1. Stwórz nowy formularz w pliku Blade, np. w pliku „create.blade.php”.
  2. Utwórz nowy kontroler za pomocą polecenia php artisan make:controller NazwaKontrolera
  3. Stwórz model za pomocą polecenia php artisan make:model NazwaModela.
  4. W kontrolerze utwórz metodę odpowiedzialną za przechwytywanie danych z formularza i ich zapisywanie w bazie danych.
  5. W pliku formularza utwórz formularz i dodaj do niego pola, które chcesz zapisać w bazie danych.
  6. W metodzie kontrolera, która przechwytuje dane z formularza, użyj metody $request->validate() do walidacji danych wejściowych.
  7. Jeśli walidacja zakończy się powodzeniem, utwórz nowy obiekt za pomocą Eloquenta i wypełnij go danymi z formularza.
  8. Zapisz obiekt w bazie danych za pomocą metody save().

Najpierw ogólny zarys:

// Kontroler
public function store(Request $request)
{
    $request->validate([
        'nazwa_pola_1' => 'required|string',
        'nazwa_pola_2' => 'required|string',
    ]);

    $model = new Model;
    $model->nazwa_pola_1 = $request->nazwa_pola_1;
    $model->nazwa_pola_2 = $request->nazwa_pola_2;
    $model->save();

    return redirect()->route('nazwa_route');
}

// Plik Blade
<form action="{{ route('nazwa_route.store') }}" method="post">
    @csrf

    <input type="text" name="nazwa_pola_1">
    <input type="text" name="nazwa_pola_2">

    <button type="submit">Zapisz</button>
</form>

Upewnij się, że w pliku routes/web.php zdefiniowałeś odpowiednie trasy dla formularza i jego przetwarzania.

Route::get('nazwa_route/create', [NazwaKontrolera::class, 'create'])->name('nazwa_route.create');
Route::post('nazwa_route', [NazwaKontrolera::class, 'store'])->name('nazwa_route.store');

Pierwsza linia definiuje trasę dla widoku formularza i powiązaną z nią metodę w kontrolerze (create). Druga linia definiuje trasę dla przetwarzania formularza i powiązaną z nią metodę w kontrolerze (store).

W Laravel korzysta się z modeli do komunikacji z bazą danych. Model reprezentuje tabelę w bazie danych i pozwala na łatwe zarządzanie danymi w bazie danych za pomocą metod Eloquenta.

Aby stworzyć model, możesz użyć polecenia php artisan make:model NazwaModela. To polecenie utworzy plik modela w folderze app/ i będziesz mógł go edytować, aby dostosować go do swoich potrzeb.

Po utworzeniu modelu możesz w nim zdefiniować reguły walidacji i inne logikę dotyczącą danych przechowywanych w bazie danych. Następnie możesz go użyć w swoim kontrolerze do zapisywania danych z formularza w bazie danych.

Oto przykład kontrolera, w którym używany jest model do zapisywania danych z formularza w bazie danych:

use App\Models\NazwaModela;
use Illuminate\Http\Request;

class NazwaKontrolera {
    public function store(Request $request) {
        $validatedData = $request->validate([
            'pole1' => 'required',
            'pole2' => 'required',
        ]);

        $model = new NazwaModela();
        $model->pole1 = $validatedData['pole1'];
        $model->pole2 = $validatedData['pole2'];
        $model->save();

        return redirect()->route('nazwa_route.index')->with('success', 'Dane zostały pomyślnie zapisane!');
    }
}

W powyższym przykładzie, w pierwszych liniach importujemy model i Request z biblioteki Illuminate. W metodzie store w pierwszej kolejności następuje walidacja danych z formularza za pomocą metody validate z obiektu Request. Następnie tworzymy nowy obiekt modelu, ustawiamy jego wartości na podstawie danych z formularza i zapisujemy je w bazie danych za pomocą metody save. W ostatniej linii przekierowujemy użytkownika z powrotem na stronę główną i wyświetlamy komunikat o powodzeniu.

Jak już umiemy dodawać dane to czas nauczyć się je edytować. Oto przykład kontrolera, w którym używany jest model do edycji danych w bazie danych:

use App\Models\NazwaModela;
use Illuminate\Http\Request;

class NazwaKontrolera {
    public function update(Request $request, $id) {
        $validatedData = $request->validate([
            'pole1' => 'required',
            'pole2' => 'required',
        ]);

        $model = NazwaModela::find($id);
        $model->pole1 = $validatedData['pole1'];
        $model->pole2 = $validatedData['pole2'];
        $model->save();

        return redirect()->route('nazwa_route.index')->with('success', 'Dane zostały pomyślnie zaktualizowane!');
    }
}

W powyższym przykładzie, w pierwszych liniach importujemy model i Request z biblioteki Illuminate. W metodzie update w pierwszej kolejności następuje walidacja danych z formularza za pomocą metody validate z obiektu Request. Następnie pobieramy rekord z bazy danych za pomocą metody find na obiekcie modelu i ustawiamy jego wartości na podstawie danych z formularza. W ostatniej linii zapisujemy zmiany w bazie danych za pomocą metody save i przekierowujemy użytkownika z powrotem na stronę główną

No i na koniec pozostało nam usuwanie danych

use App\Models\NazwaModela;
use Illuminate\Http\Request;

class NazwaKontrolera {
    public function destroy(Request $request) {
        $id = $request->input('id');
        $model = NazwaModela::find($id);
        $model->delete();

        return redirect()->route('nazwa_route.index')->with('success', 'Dane zostały pomyślnie usunięte!');
    }
}

W powyższym przykładzie, w pierwszych liniach importujemy model z biblioteki Illuminate. W metodzie destroy pobieramy rekord z bazy danych za pomocą metody find na obiekcie modelu i usuwamy go za pomocą metody delete.

Aby wyświetlić parametr with w pliku Blade, można użyć następującego kodu:

@if (session()->has('success'))
    <div class="alert alert-success">
        {{ session()->get('success') }}
    </div>
@endif

W powyższym przykładzie, sprawdzamy, czy w sesji został zapisany klucz success, a jeśli tak, to wyświetlamy komunikat za pomocą funkcji get na obiekcie sesji. W kodzie HTML używamy klas CSS, takich jak alert i alert-success, aby wyświetlić komunikat w odpowiedniej stylizacji.

Podobne artykuły