Skip to content
  • About
    • What is Symfony?
    • Community
    • News
    • Contributing
    • Support
  • Documentation
    • Symfony Docs
    • Symfony Book
    • Screencasts
    • Symfony Bundles
    • Symfony Cloud
    • Training
  • Services
    • Platform.sh for Symfony Best platform to deploy Symfony apps
    • SymfonyInsight Automatic quality checks for your apps
    • Symfony Certification Prove your knowledge and boost your career
    • SensioLabs Professional services to help you with Symfony
    • Blackfire Profile and monitor performance of your apps
  • Other
  • Blog
  • Download
sponsored by
  1. Home
  2. Documentation
  3. Symfony: The Fast Track
  4. Polish
  5. Przedstawienie projektu

Przedstawienie projektu

Musimy znaleźć projekt, nad którym będziemy pracować. Jest to spore wyzwanie, ponieważ musimy znaleźć projekt wystarczająco duży, aby dokładnie omówić Symfony, ale jednocześnie na tyle mały, abyście się nie znudzili wdrażając podobne funkcje więcej niż raz.

Wyłonienie projektu

Ponieważ książka zostanie opublikowana podczas SymfonyCon Amsterdam, byłoby fajnie, gdyby nasz projekt w jakiś sposób był związany z Symfony i konferencjami. Co myślisz o księdze gości? Livre d'or, jak mówimy po francusku. Odczuwam przyjemną nostalgię tworząc księgę gości w 2019 roku!

Trafiony-zatopiony. Projekt będzie polegał na zbieraniu informacji na temat konferencji: lista konferencji na stronie głównej, osobna strona dla każdej konferencji, mnóstwo miłych komentarzy. Komentarz składa się z krótkiego tekstu i opcjonalnego zdjęcia wykonanego podczas konferencji. Przypuszczam, że właśnie wypisałem całą specyfikację, której potrzebujemy, aby zacząć.

Projekt będzie zawierał kilka aplikacji. Klasyczna aplikacja internetowa z frontendem w HTML, API i SPA dla telefonów komórkowych. Co Ty na to?

Nauka przez praktykę

Najlepiej się uczyć, ćwicząc. Kropka. Czytanie książki o Symfony jest przyjemne, ale kodowanie aplikacji na własnym komputerze podczas lektury jest o wiele lepsze. Ta książka jest wyjątkowa również z innego powodu. Napisałem ją w taki sposób, abyś podążając przez kolejne rozdziały, osiągał/a takie same rezultaty, jak ja, kiedy po raz pierwszy kodowałem tę aplikację.

Książka zawiera cały kod, który musisz napisać, i wszystkie polecenia, które musisz wykonać, aby uzyskać ostateczny projekt. Nie pominąłem żadnego kawałka kodu i podałem wszystkie polecenia. Jest to możliwe, ponieważ nowoczesne aplikacje napisane w Symfony nie wymagają zbyt dużo bazowego kodu. Większość kodu, który napiszemy razem, dotyczy logiki biznesowej projektu. Reszta jest w większości zautomatyzowana lub zostanie wygenerowana automatycznie.

Schemat infrastruktury

Nawet jeśli pomysł wydaje się prosty, nie zamierzamy budować projektu w stylu "Hello World". Nie ograniczymy się do PHP i bazy danych.

Celem jest stworzenie projektu, w którym rozwiążemy niektóre problemy, z jakimi spotykasz się w codziennym życiu. Jakie? Przyjrzyj się końcowej infrastrukturze projektu:

Jedną z największych korzyści płynących z zastosowania frameworka jest niewielka ilość kodu potrzebna do napisania takiego projektu:

  • 20 klas PHP w katalogu src/ dla aplikacji internetowej;
  • 550 znaczących linii kodu PHP (ang. Logical Lines of Code, LLOC) zgodnie z danymi wskazanymi przez PHPLOC;
  • 40 linii dostosowujących konfigurację podzielonych na trzy pliki (przy użyciu atrybutów i YAML), do skonfigurowania części backendowej projektu;
  • 20 linii konfiguracji infrastruktury lokalnej (Docker);
  • 100 linii konfiguracji infrastruktury produkcyjnej (Platform.sh);
  • 5 zdefiniowanych zmiennych środowiskowych.

Czas na wyzwanie!

Skąd pobrać kod źródłowy projektu?

Trzymając się stylistyki lat 90., mógłbym stworzyć płytę CD zawierającą kod źródłowy i Ci ją udostępnić, prawda? Zamiast tego staromodnego podejścia wykorzystamy jednak repozytorium Git.

Sklonuj (ang. clone) repozytorium księgi gości na swój komputer:

1
$ symfony new --version=5.4-1 --book guestbook

To repozytorium zawiera cały kod tej książki.

Zauważ, że używamy symfony new zamiast git clone. Polecenie symfony new robi więcej niż tylko klonowanie repozytorium (hostowanego na GitHubie w ramach organizacji the-fast-track: https://github.com/the-fast-track/book-5.4-1). Uruchamia również serwer WWW, kontenery, migruje bazę danych, uzupełnia bazę testowymi danymi (ang. fixtures), itp. Po uruchomieniu tego polecenia, strona internetowa powinna być uruchomiona i gotowa do użycia.

Kod z repozytorium jest identyczny z kodem w książce (użyj dokładnego adresu URL repozytorium podanego powyżej). Ręczne wprowadzanie zmian opisywanych w kolejnych rozdziałach do kodu źródłowego w repozytorium jest prawie niemożliwe. Próbowałem tego w przeszłości, ale nie udało mi się. Tak się po prostu nie da. Szczególnie w przypadku książek, które opowiadają historię tworzenia strony internetowej. Ponieważ każdy rozdział zależy od poprzednich, zmiana może wpłynąć na wszystkie kolejne rozdziały.

Dobrą wiadomością jest to, że repozytorium Git dla tej książki jest nie ręcznie, lecz automatycznie generowane na podstawie jej zawartości. Dokładnie tak! Lubię wszystko automatyzować, więc istnieje skrypt, którego zadaniem jest przejście książki i stworzenie repozytorium Git na jej podstawie. Ma to pewną nieoczekiwaną konsekwencję: podczas aktualizacji książki skrypt zawiedzie, jeśli zmiany są niespójne lub jeśli zapomnę o zaktualizowniu niektórych instrukcji. To istne BDD - Book Driven Development!

Nawigowanie po kodzie źródłowym

Co więcej, repozytorium to nie tylko ostateczna wersja kodu na gałęzi main. Skrypt wykonuje instrukcje przedstawione w książce i zatwierdza zmiany (ang. commit) na końcu każdej sekcji. Dodatkowo każda zmiana w repozytorium jest odpowiednio oznaczona (ang. tag) nazwą etapu, którego dotyczy - co ułatwi Ci przeglądanie kodu. Ładnie, prawda?

Jeżeli chcesz, możesz zobaczyć cały kod, jaki powstał w danym etapie, poprzez przełączenie się (ang. checkout) na odpowiedni znacznik (ang. tag). Na przykład, jeśli chcesz przeczytać i przetestować kod na końcu etapu 10, wykonaj następujące czynności:

1
$ symfony book:checkout 10

Podobnie jak w przypadku klonowania repozytorium, nie używamy komendy git checkout ale symfony book:checkout. Polecenie to sprawia, że niezależnie od stanu, w jakim jest Twój projekt, pliki zmieniają się do wersji zgodnej z etapem, który wskazujesz, a strona jest nadal w pełni funkcjonalna. Uwaga! Wszystkie dotychczasowe dane, kod i kontenery są usuwane w trakcie tej operacji.

Możesz również przełączyć się na konkretny podetap:

1
$ symfony book:checkout 10.2

Ponownie, gorąco polecam samodzielne kodowanie, ale jeśli utkniesz, zawsze możesz porównać swój kod z zawartym w książce.

Nie wiesz, czy Twój kod jest poprawny w podetapie 10.2? Sprawdź listę zmian (ang. diff):

1
2
3
4
$ git diff step-10-1...step-10-2

# And for the very first substep of a step:
$ git diff step-9...step-10-1

Chcesz wiedzieć, kiedy plik został utworzony lub zmodyfikowany?

1
$ git log -- src/Controller/ConferenceController.php

Możesz również przeglądać listy zmian (ang. diffs), znaczniki (ang. tags) i konkretne zatwierdzenia (ang. commit) bezpośrednio na GitHub. Jest to świetny sposób na skopiowanie/wklejenie kodu, jeśli czytasz papierową książkę!

Previous page Przygotowanie środowiska pracy
Next page Od zera do produkcji
This work, including the code samples, is licensed under a Creative Commons BY-NC-SA 4.0 license.
TOC
    Version

    Symfony 5.4 is backed by

    Peruse our complete Symfony & PHP solutions catalog for your web development needs.

    Peruse our complete Symfony & PHP solutions catalog for your web development needs.

    Save your teams and projects before they sink

    Save your teams and projects before they sink

    Version:
    Locale:
    ebook

    This book is backed by:

    see all backers

    Symfony footer

    Avatar of Marc Verney, a Symfony contributor

    Thanks Marc Verney for being a Symfony contributor

    2 commits • 2 lines changed

    View all contributors that help us make Symfony

    Become a Symfony contributor

    Be an active part of the community and contribute ideas, code and bug fixes. Both experts and newcomers are welcome.

    Learn how to contribute

    Symfony™ is a trademark of Symfony SAS. All rights reserved.

    • What is Symfony?

      • What is Symfony?
      • Symfony at a Glance
      • Symfony Components
      • Symfony Releases
      • Security Policy
      • Logo & Screenshots
      • Trademark & Licenses
      • symfony1 Legacy
    • Learn Symfony

      • Symfony Docs
      • Symfony Book
      • Reference
      • Bundles
      • Best Practices
      • Training
      • eLearning Platform
      • Certification
    • Screencasts

      • Learn Symfony
      • Learn PHP
      • Learn JavaScript
      • Learn Drupal
      • Learn RESTful APIs
    • Community

      • Symfony Community
      • SymfonyConnect
      • Events & Meetups
      • Projects using Symfony
      • Contributors
      • Symfony Jobs
      • Backers
      • Code of Conduct
      • Downloads Stats
      • Support
    • Blog

      • All Blog Posts
      • A Week of Symfony
      • Case Studies
      • Cloud
      • Community
      • Conferences
      • Diversity
      • Living on the edge
      • Releases
      • Security Advisories
      • Symfony Insight
      • Twig
      • SensioLabs Blog
    • Services

      • SensioLabs services
      • Train developers
      • Manage your project quality
      • Improve your project performance
      • Host Symfony projects

      Powered by

    Follow Symfony