Web-Applications

Tasks studies - laboratory

View project on GitHub

Aplikacje internetowe 1 (AI1) – laboratorium nr 6

Laravel – Eloquent ORM, migracje, seedy

Początek laboratorium:

• w XAMPP uruchomić Apache oraz MySQL, następnie przejść do phpMyAdmin,

• pobrać na pulpit archiwum Lab006_AI1_start.zip, w którym umieszczony jest projekt startowy do wykonania zadań oraz rozpakować to archiwum,

• przejść do rozpakowanego folderu oraz w przypadku posiadania innych ustawień niż domyślne (np. połączenia z bazą), wykonać ich zmianę w pliku .env.example,

• uruchomić skrypt start.bat (Windows, 2x kliknięciem) lub start.sh (inne systemy, przez polecenie bash start.sh).

Zadania (Laravel):

Zadanie 6.1: *

Wyjaśnić działanie poleceń zawartych w pliku start.bat.

link

link

link

link

Zadanie 6.2:

Otworzyć terminal cmd (Command Prompt) w VSCode. Uruchomić serwer deweloperski php dla przy użyciu komendy serve artisan’a.

php artisan serve

W przeglądarce internetowej przejść pod adres:

http://localhost:8000

Zadanie 6.3:

Zapoznać się z następującymi zagadnieniami: • modele (app/Models),

• migracje (database/migrations),

• seeder’y (database/seeders),

• konwencje nazewnictwa zaakceptowane przez społeczność Laravel’a.

Odnaleźć w projekcie pliki dotyczące powyższych zagadnień dotyczących modelu Country. Otworzyć drugą kartę terminala cmd (Command Prompt) w VSCode. Wygenerować nowy model wycieczek wraz wygenerowaniem dla niego: migracji, seedera oraz kontrolera.

link

link

link

link

php artisan make:model Trip -msc

Zadanie 6.4:

Na podstawie wymagań z ostatniego zadania poprzedniego laboratorium oraz uwzględniając jego przykładowe rozwiązanie dostępne w pliku trips.sql uzupełnić migrację (database/migrations/…_create_trips_table.php) tworzącą tabelę trips o wymagane kolumny wraz z ich typami danych.

Następnie uruchomić wykonanie migracji oraz sprawdzić zawartość bazy w phpMyAdminie (odświeżać go po każdym wykonaniu).

W przypadku zauważenia pomyłki, cofnąć ostatnią migrację, wykonać poprawę i końcowo wykonać znów migracje. Ewentualnie można użyć fresh.

link

link

link

link

link

link

php artisan migrate
php artisan migrate:rollback
php artisan migrate:fresh

Zadanie 6.5:

Na podstawie przykładowego rozwiązania dostępnego w pliku trips.sql został przygotowany seeder dotyczący krajów (plik database/seeders/CountrySeeder.php). Uzupełnić także database/seeders/TripSeeder.php aby do tabeli trips były dodawane przykładowe dane (na razie dwóch pierwszych wycieczek, później wszystkich *).

link

link

link

Zadanie 6.6:

Zapoznać się z zawartością pliku app/Models/Country.php. Uzupełnić model wycieczek app/Models/Trip.php wraz z uwzględnieniem:

• tabela wycieczek ma zawierać kolumny created_at i updated_at,

• domyślna wartość dni dla wycieczki to 7,

• ustalić wszystkie właściwości jako fillable oprócz id tabel,

• zrealizować powiązanie pomiędzy modelami krajów i wycieczek (obustronnie).

link

link $timestamps

link $attributes

link $fillable

link

link

link

Zadanie 6.7:

Wykonać seed oraz sprawdzić zawartość bazy w phpMyAdminie

php artisan db:seed --class=CountrySeeder
php artisan db:seed --class=TripSeeder

Zadanie 6.8: *

Uzupełnić plik database/seeders/DatabaseSeeder.php, tak aby seeder’y krajów i wycieczek były wykonywane w odpowiedniej kolejności, przy wpisaniu jednej komendy.

php artisan db:seed

Zadania (Blade, Eloquent ORM):

Zadanie 6.9:

Uzupełnić app/Http/Controllers/TripController.php o dwie publiczne funkcje:

• funkcja index, zwracająca widok z pliku resources/views/trips/index.blade.php wraz z przekazaniem do niego zmiennej trips zawierającej kolekcję wszystkich wycieczek pobranych z bazy danych,

• funkcja show, przyjmująca jeden parametr id, zwracająca widok z pliku resources/views/ trips/show.blade.php z przekazaniem do niego jednego obiektu wycieczki pobranego z bazy danych (wybór na podstawie wartości parametru id) lub status 404 w przypadku, gdy wycieczka nie istnieje.

link

link

link

public function index()
{
  return /* … */;
}
public function show($id)
{
  return /* … */;
}

Zadanie 6.10:

Ustawić trasy dla obu funkcji kontrolera z poprzedniego zadania. Dla drugiej funkcji należy uwzględnić id (parametr w ścieżce). Nazwać tą trasę (named route, czyli „trasa nazwana”) jako: trips.show.

link

link

Zadanie 6.11:

Korzystając z zawartości kolekcji trips (przekazywanej do widoku) wykonać z wykorzystaniem pętli @forelse … @empty … @endforelse dynamiczne generowanie kart i tabelki dotyczących wycieczek.

W linku „Więcej szczegółów…” ustalić href jako odniesienie do trasy nazwanej poprzednim zadaniu, wraz z użyciem id poszczególnej wycieczki.


Zadanie 6.12: *

Korzystając z obiektu wycieczki przekazywanego do widoku show.blade.php:

• umieścić na stronie kartę z danymi tej wycieczki,

• usunąć link „Więcej szczegółów…”,

• wyśrodkować kartę,

• wyśrodkować nagłówek „Wycieczka”,

• zmienić tytuł strony na „Wycieczka …” (nazwa danej wycieczki).

link

link

Przejść pod następujące adresy:

http://localhost:8000/trips/1

http://localhost:8000/trips/10

Zadanie 6.13: *

Sprawdzić działanie linków „Więcej szczegółów…” na kartach na stronie:

http://localhost:8000/trips

Zadanie 6.14: *](https://github.com/dawidolko/Web-Applications/tree/main/LAB06/task) Zastąpić trasy dla obu funkcji kontrolera z zadania 6.10 jedną grupą tras dla tego kontrolera. Nie pominąć nazwy „trasy nazwanej” trips.show.

link

Zadanie 6.15: *

Zaproponować rozwiązanie problemu nadmiarowej ilości kart na stronie, np.:

• wyświetlać 4 najtańsze wycieczki,

• wyświetlać 4 losowe wycieczki,

• zmienić układ wyświetlania kart.

Zadanie 6.16: *

Wykorzystać skrypt archiwizacja.bat do spakowania projektu oraz innych plików wykluczonych w .gitignore (głównie z pominięciem folderu vendor).

Zadanie 6.17: *

Wypróbować zastosowanie SQLite zamiast MySQL:

• w .env zmienić DB_CONNECTION na sqlite,

• wykonać migracje i seeder’y,

• sprawdzić zawartość nowo utworzonej bazy w pliku ai1_lab6 (w katalogu głównym projektu) poprzez np. DBeaver’a.

link

php artisan migrate:fresh --seed


lab6

link

Database -> New Database Connection -> SQLite -> ścieżka do pliku -> Finish

  • – zadania/podpunkty do samodzielnego dokończenia/wykonania,

  • – zadania/podpunkty dla zainteresowanych.

Wersja pliku: v1.0