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. Russian
  5. Знакомство с проектом

Знакомство с проектом

Нам нужно придумать проект, над которым мы будем работать. Это довольно непростая задача. С одной стороны, проект должен быть достаточно большим, чтобы показать все возможности Symfony. С другой стороны, нужен небольшой проект, чтобы нам не наскучило реализовывать похожую функциональность по несколько раз.

Определение цели проекта

Было бы неплохо, если бы проект каким-то образом был связан с Symfony и конференциями, так как книга должна быть опубликована на конференции SymfonyCon 2019 в Амстердаме. Как насчёт гостевой книги или ливр д'ор, как мы называем её по-французски? Мне нравится это старое доброе ощущение разработки гостевой книги в 2019 году!

Наш проект предназначен для сбора отзывов о конференциях. На главной странице разместим список конференций. На странице каждой конференции выведем полезные комментарии. Комментарий будет состоять из небольшого текста и фотографии (по желанию). Кажется, я расписал все требования, чтобы начать разработку.

В проект будет входить несколько приложений. Классическое веб-приложение с использованием HTML, API и SPA-приложение для мобильных устройств.

Обучение на практике

Мы учимся, когда мы что-то делаем. Только так, и никак иначе. Конечно, читать книгу о Symfony — это хорошо, но разрабатывать приложение на своём компьютере по ходу чтения книги — гораздо лучше. Эта книга — нечто особенное, потому что было сделано всё возможное, чтобы вы могли повторять то, что в ней описано: писать код и достигать тех же результатов, что и я, когда разрабатывал приложение у себя.

В книге содержится весь код, который вам предстоит написать, а также все команды для выполнения — одним словом всё, чтобы получить готовое приложение. Все строки кода на своих местах. Все нужные команды прописаны. Это всё уместилось в этой книге благодаря тому, что в современных приложениях на Symfony очень мало шаблонного кода. В основном мы будем писать код, связанный с бизнес-логикой проекта. Всё остальное по большей части уже сделано за нас, либо автоматически генерируется.

Итоговая диаграмма структуры проекта

Несмотря на то, что наш проект кажется простым, мы не станем создавать приложение уровня "Hello World". Это значит, что мы не ограничимся только использованием PHP и взаимодействием с базой данных.

Речь идёт о создании проекта, с которым вы столкнетесь в реальности со всеми вытекающими сложностями. Не верите? Посмотрите на окончательный вариант инфраструктуры проекта:

Одно из главных преимуществ использования фреймворка — небольшое количество кода, необходимого для разработки подобного проекта:

  • 20 PHP-классов в директории src/ для работы сайта;
  • 550 логических строк PHP-кода (LLOC) по данным PHPLOC;
  • 40 строк конфигурационных данных в 3 файлах (с использованием атрибутов и YAML) преимущественно для настройки архитектуры бэкенд-части;
  • 20 строк конфигурации инфраструктуры для разработки (Docker);
  • 100 строк конфигурации для продакшен-инфраструктуры (Platform.sh);
  • 5 установленных переменных окружения.

Готовы к такому испытанию?

Получение исходного кода проекта

Я бы мог по старинке приложить к книге компакт-диск с исходным кодом, так ведь? Но как насчёт использовать Git-репозиторий?

Клонируйте репозиторий гостевой книги на свой компьютер:

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

Этот репозиторий содержит весь код, который встречается в книге.

Обратите внимание, что мы используем команду symfony new вместо git clone, потому что она не только позволяет клонировать репозиторий, который находится в организации the-fast-track на GitHub по адресу https://github.com/the-fast-track/book-5.4-1. Также эта команда запускает веб-сервер и контейнеры, применяет миграции базы данных, загружает фикстуры и т.д. После выполнения команды будет запущен сайт, который можно сразу начать использовать.

Полученный код полностью соответствует тому, который присутствует в книге (используйте указанный выше URL-адрес репозитория). Крайне сложно вручную поддерживать один и тот же код одновременно и в книге, и в репозитории. Я пытался ранее, но безуспешно. Я бы даже сказал, что это невозможно. Особенно в книгах, подобной этой, где поэтапно рассказывается, как разрабатывать сайт. Тем более учитывая, что каждая глава зависит от предыдущей, и очередное изменение может не самым лучшим образом отразиться во всех последующих главах.

К счастью, Git-репозиторий для книги автоматически генерируется из содержимого книги. Да, да, вы правильно поняли. Мне нравится всё автоматизировать, поэтому я написал скрипт, который считывает всю книгу и создаёт Git-репозиторий. У такого подхода есть приятный побочный эффект: при обновлении книги скрипт ничего не создаст, если будут противоречивые изменения, либо если я забуду обновить некоторые инструкции. Всё верно, это BDD (Book-Driven Development или разработка через написание книги)!

Навигация по коду

Более того, репозиторий — это не только окончательная версия кода в ветке main. Скрипт выполняет любое действие, описанное в книге, и в конце каждого раздела фиксирует изменения в репозитории. Вдобавок он помечает каждый шаг и подшаг, чтобы облегчить просмотр соответствующего кода. Разве это не здорово?

Если вам лень, то вы можете получить код нужного шага по его тегу. Например, если вы хотите посмотреть и попробовать в действии код в конце 10 шага, выполните следующую команду:

1
$ symfony book:checkout 10

Как и при клонировании репозитория, вместо команды git checkout мы используем symfony book:checkout. Благодаря этой команде, вне зависимости от текущего шага, у вас будет полноценно работающий сайт на указанном шаге. Имейте в виду, все данные и код, а также контейнеры будут удалены после выполнения этой операции.

Вы также можете перейти на любой подшаг:

1
$ symfony book:checkout 10.2

Повторюсь: очень рекомендую самостоятельно писать код. Но если вы столкнулись с затруднениями, попробуйте сравнить ваш код с тем, что в книге.

Не уверены, что всё сделали правильно в подшаге 10.2? Сравните с вашим кодом:

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

Хотите узнать, когда файл был создан или изменён?

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

Вы также можете просматривать изменения, теги и коммиты прямо на GitHub. Это отличный способ скопировать код, особенно если вы читаете бумажное издание книги!

Previous page Проверка рабочего окружения
Next page С нуля до развёртывания
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

    Be trained by SensioLabs experts (2 to 6 day sessions -- French or English).

    Be trained by SensioLabs experts (2 to 6 day sessions -- French or English).

    No stress: we've got you covered with our 116 automated quality checks of your code

    No stress: we've got you covered with our 116 automated quality checks of your code

    Version:
    Locale:
    ebook

    This book is backed by:

    see all backers

    Symfony footer

    Avatar of Radoslaw Kowalewski, a Symfony contributor

    Thanks Radoslaw Kowalewski for being a Symfony contributor

    1 commit • 46 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