Tworzenie stron internetowych - poradnik
Aby utworzyć formularz w Laravel 9 i zapisać dane do bazy danych, należy wykonać następujące kroki:
php artisan make:controller NazwaKontrolera
php artisan make:model NazwaModela
.$request->validate()
do walidacji danych wejściowych.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.