Как проверить, есть ли у объекта propel запись i18n?
-
05-07-2019 - |
Вопрос
Я использую Symfony и Propel и пытаюсь вызвать определенную культуру для объекта и вывести некоторые поля этого объекта на экран в этой конкретной культуре.Однако, если сопоставленная запись базы данных объекта не имеет этих полей в этой конкретной культуре, я бы хотел, чтобы по умолчанию использовалась базовая культура (в данном случае en_US).
Я делаю это так:
$currentLesson = $currentLesson->getCurrentLessonsI18n($lessonCulture);
Но когда я вывожу такое, как это
$currentLesson->getTitle();
Он выводит пустую строку, если для нее нет записи о культуре.Мой вопрос: есть ли способ сделать объект по умолчанию для определенной культуры, если тот, который я указываю, недоступен, или есть ли способ узнать, имеет ли конкретный объект запись культуры i18n?
что-то вроде этого:
if($currentLesson->cultureExists($lessonCulture) $currentLesson = $currentLesson->getCurrentLessonsI18n($lessonCulture);
или
sfConfig::setPropelDefaultCulture("en_US");
Решение
Вам придется перезаписать саму Symfony, чтобы по умолчанию использовать другой язык.Здесь есть хорошее рабочее решение http://www.codemassacre.com/2008/03/10/symfony-default-language-fallback/
Другие советы
В i18n
запись, из которой ты вернешься getTranslation($language)
можно протестировать с помощью isNew()
, это скажет вам, сделал ли Propel это только что (true)
или если оно пришло из базы данных (false)
.