В прошлой статье мы сделали простой блог на 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 — не страшный монстр. Это взрослый, но дружелюбный инструмент. И ты уже им управляешь 😉
Комментарии
Пока нет комментариев. Будьте первым!