↩️ Назад

Категории

Symfony Блог. Уровень 2: Авторизация и Админка

07.09.2025 | Статья из категории: Создание сайтов

Ккак создать Symfony блог - авторизация и админка

В прошлой статье мы сделали простой блог на Symfony за 15 минут. Отлично! Теперь пойдём дальше — добавим авторизацию и админку. Без паники, без ручной настройки — только генераторы и здравый смысл.

🎯 Что ты получишь в итоге

  • Форму регистрации и входа
  • Защиту маршрутов (только для авторизованных)
  • Панель администратора с CRUD для постов
  • Автоматическую генерацию всего — без ручного кода

📌 Шаг 1: Создаём сущность User

Выполни в терминале:

php bin/console make:user

Ответь на вопросы:

  • Class name: User
  • Do you want to store user data in the database? → yes
  • Enter a property that will be the unique display name → email
  • Does this app need to hash/check user passwords? → yes

Готово! Symfony создал src/Entity/User.php и добавил нужные интерфейсы.

📌 Шаг 2: Создаём миграцию для User

php bin/console make:migration
php bin/console doctrine:migrations:migrate

Теперь у тебя есть таблица пользователей.

📌 Шаг 3: Генерируем систему авторизации

php bin/console make:auth

Выбери:

  • 1 — Login form authenticator
  • Authenticator class name: AppAuthenticator
  • Generate logout route? → yes

Создастся контроллер SecurityController, шаблон логина, маршруты и конфиг безопасности.

📌 Шаг 4: Защищаем маршруты постов

Открой config/packages/security.yaml и добавь:

access_control:
    - { path: ^/post, roles: ROLE_USER }

Теперь все маршруты /post/* доступны только авторизованным.

📌 Шаг 5: Создаём первого пользователя

Пока нет формы регистрации — создадим через консоль.

php bin/console make:command CreateUserCommand

Открой созданный файл src/Command/CreateUserCommand.php и замени содержимое на:

addArgument('email', InputArgument::REQUIRED)
            ->addArgument('password', InputArgument::REQUIRED);
    }

    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        $user = new User();
        $user->setEmail($input->getArgument('email'));
        $user->setPassword(
            $this->passwordHasher->hashPassword($user, $input->getArgument('password'))
        );

        $this->em->persist($user);
        $this->em->flush();

        $output->writeln('✅ Пользователь создан: ' . $user->getEmail());
        return Command::SUCCESS;
    }
}

Теперь выполни:

php bin/console app:create-user admin@example.com secret123

Пользователь создан! Можешь зайти на /login и войти.

📌 Шаг 6: Ставим админку EasyAdmin

composer require easycorp/easyadmin-bundle

После установки — открой config/routes/easy_admin.yaml (если нет — создай):

easy_admin_bundle:
    resource: '@EasyAdminBundle/Controller/EasyAdminController.php'
    prefix: /admin
    type: annotation

Теперь создай конфиг админки: config/packages/easy_admin.yaml

easy_admin:
    entities:
        - App\Entity\Post
        - App\Entity\User

Готово! Зайди на http://localhost:8000/admin — и ты в админке!

📌 Шаг 7: Защищаем админку

Вернись в security.yaml и добавь:

- { path: ^/admin, roles: ROLE_ADMIN }

Теперь дадим админские права нашему пользователю — открой базу данных (например, через SQLite Browser или консоль) и в поле roles у пользователя вставь:

["ROLE_ADMIN"]

Перелогинься — и у тебя полный доступ к админке!

🧠 Что ты только что освоил?

  • Систему безопасности Symfony (SecurityBundle)
  • Работу с ролями и доступом
  • Создание консольных команд
  • Установку и настройку бандлов (EasyAdmin)
  • Автоматическую генерацию админ-панели

💡 Что дальше?

  • Добавь форму регистрации: make:registration-form
  • Сделай автоподстановку автора поста при создании
  • Добавь загрузку изображений к постам
  • Подключи Bootstrap в админку или шаблоны
  • Запили API для мобильного приложения

🔚 Заключение

Ты сделал блог, добавил авторизацию и админку — и всё это без боли, без include’ов, без “я не понимаю, что происходит”.

Symfony — не страшный монстр. Это взрослый, но дружелюбный инструмент. И ты уже им управляешь 😉




Категории:

Категории

Комментарии

Пока нет комментариев. Будьте первым!

Оставить комментарий

← Назад к списку статей

Посетителей сегодня: 0
о блоге | карта блога

© Digital Specialist | Не являемся сотрудниками Google, Яндекса и NASA