Symfony 4 быстрый старт

Опять же тут не будет никаких новых вещей и секретов, все есть в документации 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

Leave a comment

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.