Как правильно добавить метаданные к сущности Symfony?
Пишу первый проект на Симфони2.8, только учусь
Будет несколько сущностей, например: элементы, страницы, категории
и к каждой нужно будет прописать уникальные метаданные (тайтл, дескрипшн, опенграф протокол, shema)
внушительный набор метаданных получается, причем, одинаковый для всех
думаю как правильно спроектировать сейчас приложение
к каждой сущности добавлять набор полей не хочется
Скорее всего, нужно создать отдельную сущность и каким то образом привязать ее к нужным объектам
КАК это можно сделать, можете пояснить?
Вариант второй (чуть более сложный и возможно более правильный) - страницы, категории и т.д. ничего не знают о метаданных. Метаданных знают за каким ресурсом они закреплены (урл, идентификатор сущности + сущность) и т.д. Мэпится все это сервисами и т.д. Так как нам в любой момент времени нужно всегда только один набор метаданных - нагрузку это не добавит, а вы сможете расширять это дело как хотите, и все изменения относящиеся к метаданным будут изолированы.
Спасибо большое, и первый вариант наверное можно было бы использовать, если без особых заморочек
Но похоже, что второй вариант больше подходит
я планировал некторые вещи генерить автоматом из имеющихся данных
и также иметь возможность вручную это дело прописать
"Мэпится все это сервисами" - вы имете ввиду Dependency Injection ?
я только начал изучать симфони - мозг закипает
Этот же подход можно использовать чтобы переводить поля?
Александр: сервис - это просто какой-то объект (класс если хотите) который что-то делает. В вашем случае - управляет метаданными. Dependency Injection это просто одна из техник управления зависимостями и инверсии контроля, которая позволяет не писать кучу бойлерплейт кода.
И да, этот же подход можно для переводов использовать, но тут уже есть больше вариантов и все зависит от задачи. Например на моем последнем проекте для переводов я использовал как раз таки Embeddable потому что это была важная часть проекта а не второстепенная штука.
Алексей Скобкин: ай эти все Translatable и прочая чушь только плохо делают...