Опять же тут не будет никаких новых вещей и секретов, все есть в документации symfony, здесь лишь краткая шпаргалка по быстрому старту и некоторому списку основных команд.
Установка
Symfony 4.
composer create-project symfony/website-skeleton:4.* symfony
Подключение БД
в файле config/packages/doctrine.yaml
в разделе dbal
:
driver: 'pdo_pgsql'
server_version: '11.2'
charset: utf8
default_table_options:
charset: utf8
url: '%env(resolve:DATABASE_URL)%'
в файле .env
в корневой папке приложения
DATABASE_URL="pgsql://app:secret@postgres:5432/app?serverVersion=11.2&charset=utf8"
чтобы подключение сработало необходимо чтобы были установлены расширения для работы с postgresql — pdo_pgsql
если fpm или cli запускается из docker, то можно установить с помощью команды
RUN apt-get update && apt-get install -y unzip libpq-dev \
&& docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql \
&& docker-php-ext-install pdo_pgsql
здесь libpq-dev
необходим для сборки pgsql
Некоторые команды
запуск unit тестов
php bin/phpunit
создание сущностей
php bin/console make:entity
создание миграции
Миграции создаются путем сравнения сущностей и текущего состояния базы данных
php bin/console make:migration
применение миграций
php bin/console doctrine:migrations:migrate
в этой версии в миграции в методе down добавляется строка
$this->addSql('CREATE SCHEMA public');
которая тут не нужна, поэтому её необходимо удалять. При автоматической генерации так же создаются некоторые не нужные строки, поэтому миграции перед применением необходимо проверять.
создание CRUD
php bin/console make:crud
для применения в формах CRUD шаблона bootstrap, можно в файле config/packages/twig.yaml
указать уже существующий шаблон
form_themes: ['bootstrap_4_layout.html.twig']
Создание пользователей и аутентификации
Создание пользователей
php bin/console make:user
Будут созданы: сущность src/Entity/User.php
, репозиторий src/Repository/UserRepository.php
и были внесены изменения по части безопасности в файле config/packages/security.yaml
Теперь необходимо создать миграции и применить их
Аутентификация
php bin/console make:auth
создается форма авторизации и добавляются изменения в config/packages/security.yaml
Регистрация
php bin/console make:registration-form
создаст контроллер, обновит User, создаст форму, и необходимо будет создать и применить миграции для добавления необходимого для регистрации поля is_verified
может понадобиться раскомментировать переменную окружения MAILER_DSN
в файле .env
и настроить mailer или поставить какой-нибудь mailcatcher, например schickling/mailcatcher (docker)
Так же необходимо добавить адрес, куда будет перенаправлен пользователь после регистрации, в src/Security/LoginFormAuthenticator.php
в методе onAuthenticationSuccess
редирект, например на домашную страницу
return new RedirectResponse($this->urlGenerator->generate('home'));
Доступ
в файле config/packages/security.yaml
в разделе access_control
можно определить куда и кому можно заходить. Если необходимо закрыть от всех, то можно сделать так:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, roles: ROLE_USER }
таким образом доступ неавторизованным пользователям будет только к страницам login, register, ко всем остальным — закрыт
В коде шаблона (twig) можно использовать метод is_granted('ROLE')
например is_granted('IS_AUTHENTICATED_ANONYMOUSLY')
для проверки доступа и вывода соответствующих элементов.
Роль IS_AUTHENTICATED_ANONYMOUSLY — анонимный пользователь
IS_AUTHENTICATED_FULL — авторизованный пользователь
или свои, например ROLE_USER