Блог Вадима Гареева

Как я создавал этот Блог. Мой первый опыт с Symfony

11.06.2024

Привет! Я хочу поделиться своим опытом создания полноценного блога на Symfony. Это был мой первый проект с этим фреймворком, и за время разработки я прошёл путь от полного новичка до уверенного пользователя Symfony.

Почему Symfony?

Что реализовано в блоге

EasyAdmin — админка за пару часов

Я использовал 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

База данных подключена через Doctrine ORM. Сущности и миграции генерировались с помощью CLI:

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

Я настроил связи OneToMany и ManyToOne, что позволило реализовать категории, комментарии и авторов для постов.

Авторизация и безопасность

Интеграция текстового редактора

Для удобного редактирования содержимого статей я подключил 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 и компоненты

Вёрстка сделана на Twig. Использовал шаблон base.html.twig, компоненты для навигации, форм и карточек.

Twig — простой, логичный и читаемый шаблонизатор. Всё, что нужно для чистой вёрстки.

Выводы

Symfony — это мощный инструмент для тех, кто хочет действительно понимать, как работает веб-приложение. Этот блог дал мне уверенность и мотивацию развиваться дальше.

В планах:

Спасибо, что прочитали! Если у тебя есть вопросы — пиши, помогу с опытом или кодом.

Категории: Symfony

Комментарии (0)

Добавить комментарий