Skip to content

Instantly share code, notes, and snippets.

@positron48
Last active May 4, 2021 14:30
Show Gist options
  • Save positron48/9f4ab3fdff3f828af4a193ff1bff0a60 to your computer and use it in GitHub Desktop.
Save positron48/9f4ab3fdff3f828af4a193ff1bff0a60 to your computer and use it in GitHub Desktop.
Практическая работа по Symfony. Часть 1

Практическая работа по Symfony. Часть 1

Создание и запуск проекта

  1. Установите composer - менеджер пакетов

  2. Установите Symfony CLI - утилита для командной строки, которая облегчит работу по созданию проектов и их настройке.

    Если во время установки у вас был запущен терминал - нужно его перезапустить, иначе новые команды (composer и symfony) могут не работать.

  3. Инициализируйте проект, для этого выполните команду: symfony new %project_name%

    Появится папка %project_name% с вашим проектом symfony. Коротко по важным папкам: config/ - настройки проекта и отдельных сервисов src/ - ваш исходный код public/ - корневая директория сайта, именно в нее стоит направлять веб-сервер vendor/ - исходный код всех установленных composer'ом сторонних библиотек

  4. Запустите веб-сервер. Тут есть 2 варианта:

    1. Можете продолжить использование Open Server в качестве веб-сервера, в таком случае нужно будет настроить новый домен (или изменить настройки localhost) таким образом, чтобы в качестве корневой папки использовалась папка public/ созданного проекта.

    Если вы используете apache2 - дополнительно потребуется установить composer require symfony/apache-pack - в корне проекта сгенерируется файл .htaccess с нужными для работы symfony из-под apache2 правилами.

    1. Можете использовать встроенный веб-сервер symfony, для этого из папки с проектом следует запустить команду symfony server:start (или symfony server:start -d, чтобы запустить сервер в фоновом режиме). По ссылке localhost:8000 будет доступна стартовая страница нового symfony-проекта.

Настройка проекта

  1. Установите вспомогательные бандлы (библиотеки). По умолчанию в проекте есть только самое необходимое, дополнительно нам понадобятся:

    • symfony composer req orm - Doctrine - бандл, реализующий работу с БД
    • symfony composer req doctrine/annotations - аннотации доктрин понадобятся нам в контроллерах для определения роутинга и параметров генерации url
    • symfony composer req security - security бандл реализует функциональность пользователей - авторизацию, регистрацию и разграничение ролей
    • symfony composer req twig - twig - самый популярный шаблонизатор на symfony (и не только)
    • symfony composer req form - form - бандл для работы с формами
    • symfony composer req validator - validator - бандл для валидации данных
    • symfony composer req symfony/maker-bundle --dev --dev здесь говорит о том, что этот бандл нужен только для разработки приложения и на боевом сервере его устанавливать не нужно. Бандл maker добавляет возможность генерации различных сущностей (контроллеров, сущностей БД, миграций, коммандов и многого другого, полный список доступен по комманде symfony console list make)
    • symfony composer req profiler --dev - профилировщик поможет в отладке ошибок, просмотре служебной информации и анализе быстродействия приложения. В нижней части экрана после установки появится дополнительная панель
    • symfony composer req orm-fixtures --dev фикстуры - используется для наполнения базы данных первоначальными или фейковыми данными (для тестирования)

    За 1 раз можно устанавливать сразу несколько библиотек, просто перечислив их через пробел.

  2. Настройте переменные окружения. В корне есть файл .env, содержащий настройки по умолчанию. Скопируйте его в .env.local - это будут ваши локальные настройки, привязанные к конкретному серверу. Пропишите строку подключения к БД, например: DATABASE_URL=pgsql://postgres:@127.0.0.1:5432/blog?serverVersion=11&charset=utf8

Страница "о проекте"

  1. Создайте контроллер, который будет отдавать страницу about - symfony console make:controller AboutController или просто symfony console make:controller, чтобы использовать интерактивный режим.

    В результате у нас создалось 2 файла -

    сreated: src/Controller/AboutController.php
    created: templates/about/index.html.twig
    

    В аннотации экшна контроллера настраивается ссылка, по которой открывается страница, в шаблоне отображаемая верстка с выводимыми данными. Данные в шаблон передает экшн контроллера.

  2. Добавьте описание проекта на страницу about и скорректируйте верстку по своему желанию. Так как страница о проекте у нас статичная - описание можно разместить непосредственно в шаблоне.

Авторизация и регистрация

  1. Создайте сущность пользователя - symfony console make:user, на вопросы можно отвечать по умолчанию - имя User, хранение в БД и проверка пароля. Вы также можете дополнить созданный класс пользователя дополнительными полями - телефон, имя, дата рождения и прочее, запустив команду symfony console make:entity User

  2. Создайте миграцию для последующего внесения изменения в БД - symfony console make:migration. Если у вас на момент запуска еще не создана база данных (указанная в строке подключение) - можете создать ее командой symfony console doctrine:database:create

  3. Примените миграции к БД - symfony console doctrine:migrations:migrate

  4. Сделайте форму авторизации - symfony console make:auth. Следуя инструкциям поправьте метод onAuthenticationSuccess в классе App\Security\UserAuthentificatorAuthenticator - после успешной авторизации пользователь должен попадать на главную страницу.

  5. Так как у нас пользователей в БД нет - нам нужно их создать. Чтобы не делать это вручную в БД, нужно использовать фикстуры. Создайте фикстуру, которая будет добавлять 2 пользователей - с правами администратора и без. symfony console make:fixture. Команда создаст класс-заготовку, в которой нужно будет создать пользователей, нужно указать у них email, роль ('ROLE_ADMIN' у администратора) и пароль (закодированный). Примените фикстуру - symfony console doctrine:fixtures:load. Будьте осторожны, т.к. фикстура при применении затирает имеющиеся в БД данные.

  6. Перейдите по ссылке /login и попробуйте авторизоваться под созданными пользователями. Авторизация должна проходить успешно, а в панели профилировщика отображаться username текущего пользователя. Открытие ссылки /logout будет разлогинивать пользователя.

  7. Создайте форму регистрации пользователя - symfony console make:registration-form. Форма регистрации доступна по ссылке /register

  8. Сделайте так, чтобы формы регистрации и авторизации были недоступны для авторизованного пользователя. Для этого нужно проверить в соответствующих экшнах контроллера авторизованность пользователя ($this->getUser() !== null) и в случае, если пользователь авторидован - делать редирект на другую страницу - return new RedirectResponse($this->generateUrl('about')). about здесь - имя роута, куда вы хотите редиректить пользователя.

Фронтэнд

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

Адреса ссылок не стоит хардкодить, следует использовать функциональность шаблонизатора - {{ path('logout') }} сгенерирует ссылку на экшн с именем logout.

Для проверки роли пользователя twig также имеет специальные функции:

{% if is_granted('ROLE_ADMIN') %}
    <a href="...">Выйти</a>
{% endif %}

Для облегчения верстки можно использовать вспомогательные css-фреймворки, например, bootstrap или materialize. При этом допускается как просто подключить сгенерированные css/js файлы фреймворков, так и настроить полноценную сборку фронтенда посредством yarn, symfony encore и того же bootstrap, который также имеет готовый шаблон для использования в формах симфони.

Подробнее о кастомизации форм можно почитать в документации.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment