11.06.2024
Привет! Я хочу поделиться своим опытом создания полноценного блога на Symfony. Это был мой первый проект с этим фреймворком, и за время разработки я прошёл путь от полного новичка до уверенного пользователя Symfony.
Я использовал EasyAdmin для реализации админ-панели. Он позволил быстро развернуть интерфейс управления всеми сущностями без лишнего кода.
Например, вот так выглядела конфигурация CRUD для сущности Post
:
// src/Controller/Admin/PostCrudController.php
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
class PostCrudController extends AbstractCrudController
{
public static function getEntityFqcn(): string
{
return Post::class;
}
public function configureFields(string $pageName): iterable
{
return [
TextField::new('title'),
SlugField::new('slug')->setTargetFieldName('title'),
TextEditorField::new('content'),
AssociationField::new('category'),
BooleanField::new('isPublished'),
];
}
}
А так я подключал пункты меню в DashboardController
:
public function configureMenuItems(): iterable
{
yield MenuItem::linkToCrud('Статьи', 'fas fa-newspaper', Post::class);
yield MenuItem::linkToCrud('Категории', 'fas fa-folder', Category::class);
yield MenuItem::linkToCrud('Комментарии', 'fas fa-comments', Comment::class);
yield MenuItem::linkToCrud('Пользователи', 'fas fa-users', User::class);
}
База данных подключена через Doctrine ORM. Сущности и миграции генерировались с помощью CLI:
php bin/console make:entity
php bin/console make:migration
php bin/console doctrine:migrations:migrate
Я настроил связи OneToMany
и ManyToOne
, что позволило реализовать категории, комментарии и авторов для постов.
ROLE_USER
и ROLE_ADMIN
security.yaml
Для удобного редактирования содержимого статей я подключил CKEditor и использовал стили из Bootstrap. Это позволило сохранить единый дизайн интерфейса и обеспечить пользователям знакомый опыт работы с редактором.
Пример подключения в классе формы PostType
:
// src/Form/PostType.php
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use FOS\CKEditorBundle\Form\Type\CKEditorType;
class PostType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('title')
->add('content', CKEditorType::class, [
'attr' => [
'class' => 'form-control', // Bootstrap class
'rows' => 10
],
]);
}
}
Редактор CKEditor гибко настраивается, а Bootstrap-классы обеспечивают адаптивность и знакомый стиль полей.
Вёрстка сделана на Twig. Использовал шаблон base.html.twig
, компоненты для навигации, форм и карточек.
Twig — простой, логичный и читаемый шаблонизатор. Всё, что нужно для чистой вёрстки.
Symfony — это мощный инструмент для тех, кто хочет действительно понимать, как работает веб-приложение. Этот блог дал мне уверенность и мотивацию развиваться дальше.
Спасибо, что прочитали! Если у тебя есть вопросы — пиши, помогу с опытом или кодом.
Категории: Symfony