# Kurs WWW. Lista nr 8 ###### tags: `www20` `pwit` :::info grupa PWit, wtorki 12-14 ::: ## Deklaracje :::info Studenci wypełniają poniższą tabelkę przed rozpoczęciem zajęć. ::: Gotowość rozwiązania zadania należy wyrazić poprzez postawienie X w odpowiedniej kolumnie! Można również wyrazić chęć prezentacji któregoś zadeklarowanych zadań za pomocą znaku ==X== (X na żółtym tle). | | 7.8 | 8.1 | 8.2 | 8.3 | 8.4 | 8.5 | |--------------------------- | ----- | ----- | ----- | ----- | ----- | ----- | | Kacper Bajkiewicz | | X | X | X | X | X | | Jakub Bok | | | | | | | | Kamila Brzozowska | | | | | | | | Monika Jędrzejkowska | | | | | | | | Karol Kęciński | | | | | | | | Szymon Kiczak | | | | | | | | Szymon Kosakowski | | | | | | | | Denys Lukeniuk | | x | x | x | x | | | Piotr Mańkowski | | | | | | | | Mateusz Materek | | | | | | | | Sonia Pawluk | | | | | | | | Patryk Pęczak | | | | | | | | Bartosz Polaszek | | | | | | | | Marcin Rogala | | x | x | | x | | | Aleksander Szymański | | | | | | | | Jakub Świgło | | | | | | | | Nikola Wrona | | | | | | | ## Zadanie 7.8 :::danger Autor: ::: ## Zadanie 8.1 :::danger Autor: Kacper Bajkiewicz ::: Po instalacji najpiew Composera a następnie Symfony, żeby utworzyć nowy projekt, wpisujemy w konsolę polecenie z wykładu: ```composer create-project symfony/website-skeleton my_project_name``` Polecenie ```about``` mówi o nam o aktualnej wersji php, symfony i jądra, a także np o tym, gdzie trzymane są pliki cache, ilu bitowa architektura jest wykorzystywana + jaka jest używana strefa czasowa. Polecenie ```router:match``` służy do sprawdzenia, jakie ścieżki pasują do URL w argumencie jego wywołania. Przydaje się to w debugowaniu ścieżek i w naprawianiu problemów z routingiem. ## Zadanie 8.2 :::danger Autor: Marcin Rogala ::: Controller przez funkcję render zwraca tablicę zawierającą wpisy do rankingu. Dane przekazywane są do szablonu. Kod controllera: https://pastebin.com/C7SjEJkr Szablon uzupełnia tabelę z html odwołując się do danych z controllera przez zmienną ranking. Rozpatrujemy trzy przypadki, żeby ustawić odpowiednią klasę z pliku style.css. Wykorzystujemy następujące możliwości szablonu twig: 1. Iterowanie po wpisach do rankinu ``` {% for entry in ranking %} {% endfor %} ``` 2. Rozpatrywanie przypadków ``` {% if warunek %} {% elseif warunek %} {% endif %} ``` Style css załączemy używając: ``` <link rel="stylesheet" href="{{asset('/css/style.css')}}"> ``` Funkcja asset() zwraca poprawną ścieżkę do pliku style.css. Kod szablonu: https://pastebin.com/b9Z2uYtw ## Zadanie 8.3 :::danger Autor: Denys Lukeniuk ::: ## Zadanie 8.4 :::danger Autor: Marcin Rogala ::: Encję tworzymy poleceniem: ``` php bin/console make:entity ``` Do konsoli podajemy następujące informacje o polach encji: 1. Nazwa 2. Typ danych 3. Dlugość 4. Czy pole może być nullem Walidację encji wykonujemy używając ``` @Assert\Regex("") ``` Kod encji: https://pastebin.com/6RiGwe6D ## Zadanie 8.5 :::danger Autor: Kacper Bajkiewicz ::: W tym zadaniu trzeba utworzyć formularz do wykonywania przelewów i zrobić jakąś niezbyt zaawansowaną walidację (ja zrobiłem formularz do płacenia kartą). Encji nie będę tu wrzucał, bo jest bardzo podobna do tej z zadania 4tego. Szablony do renderowania stron wyglądają następująco: Tutaj ten do wpisywania danych: ``` {% extends 'base.html.twig' %} {% block title %}Płatność!{% endblock %} {% block body %} <div id="form"> {{ form(form) }} </div> {% endblock %} ``` A tutaj ten do wyświetlenia poprawnie wpisanych danych (już po walidacji): ``` {% extends 'base.html.twig' %} {% block title %}Podsumowanie płatności{% endblock %} {% block body %} <div id="container"> {{name}}<br> {{surname}}<br> {{cardNumber}}<br> {{cvc}}<br> {{amount}}<br> </div> {% endblock %} ``` Omawianie kontrolera podzielę na dwie części. Kiedy chcemy wysłać wpisane dane na serwer. ``` public function TransferPost(Request $request): Response { $transfer = new TransferModel(); $form = $this->createFormBuilder($transfer) ->add('name', TextType::class, ['label' => 'Imię']) ->add('surname', TextType::class, ['label' => 'Nazwisko']) ->add('cardNumber', TextType::class, ['label' => 'Numer karty']) ->add('cvc', TextType::class, ['label' => 'Numer CVC']) ->add('amount', TextType::class, ['label' => 'Kwota']) ->add('save', SubmitType::class, ['label' => 'Wyślij']) ->getForm(); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $data = [ 'name' => $form->getData()->getName(), 'surname' => $form->getData()->getSurname(), 'cardNumber' => $form->getData()->getCardNumber(), 'cvc' => $form->getData()->getCVC(), 'amount' => $form->getData()->getAmount(), ]; $response = $this->forward('App\Controller\TransferController::TransferSuccess', $data); return $response; } return $this->render('transfer/index.html.twig', [ 'form' => $form->createView(), ]); } ``` Najpierw tworzymy w niej formularz z odpowiednimi polami i jeśli nie został on wysłany lub jest wypełniony niepoprawnymi danymi, to rednerujemy go od nowa. Jeśli zaś przejdziemy ifa w tej funkcji, to renderujemy stronę z wyświetlaniem poprawnych danych, przekazując jej argumenty z tego formularza. Odpowiada za to funkcja: ``` /** * @Route("/success", name="success") */ public function TransferSuccess($name, $surname, $cardNumber, $cvc, $amount): Response { return $this->render('transfer/success.html.twig', [ 'name' => $name, 'surname' => $surname, 'cardNumber' => $cardNumber, 'cvc' => $cvc, 'amount' => $amount, ]); } ``` Odpowiadając na pytanie z ćwiczeń, żeby dołączyć do tego formularza jakiś arkusz styli CSS, musimy w pliku twig dodać taką linijkę: ``` {% block stylesheets %}<link href="{{ asset('XXX') }}" rel="stylesheet"/>{% endblock %} ``` Gdzie XXX to ścieżka do arkuszu include'owanego stylu (ale względem folderu public!).