Выбор Поля Таблицы В Соответствии С Текущим Языком

Добрый вечер!

Подскажите пожалуйста как решить проблему топика?

Использовал langUrlManager.

Так как на сайте предусмотрено всего 2 языка, в базе есть таблицы в которых по 2 поля типа "caption_ua", "caption_en" и т.д.

Сделал функцию-хелпер:




public function getCaption($model)

      {

        if (Yii::app()->language=='uk') return $model->caption_ua;

        if (Yii::app()->language=='en') return $model->caption_en;

      }

Везде по коду где было, например:

заменил на:




echo MyHelpers::getCaption($model);



Не смейтесь, я только начинаю разбираться )))))

Подскажите, как сделать это дело “поэлегантней”? :)

Думал, может копать в сторону afterFind, но не совсем понятно как выдавать\подставлять нужное поле. а во вторых - боюсь такая огульная подстановка вылезет боком где-то, например, при редактировании статьи, создании и т.д.

Перфекционизм) Знакомо ;)

Во-первых, в данном случае лучше подходит switch-case конструкция.

Во-вторых, я считаю вполне себе правильный подход в данной ситуации Вы выбрали с хелпером. Только я бы передавал в функцию вывода еще название поля и язык, например Lang::print($model, $caption, $lang=‘ua’) и уже дописывал “_lang”.

В-третьих, с afterFind вы сможете выводить только одиночные записи, а с хелпером уже и списки

Благодарю за ответ!

Блин, я боялся что мои функции примут за быдлокод, оказалось, не всё так плохо )))) Спасибо.

Update

Ура, таки можно в Yii делать то, что можно и в обычном ПХП - обращаться к атрибутам как к элементам массива. ;) В результате получит такую вот короткую функцию вместо 3-х коротких но с разными названиями:




public function getTranslation($model,$attribute='caption')

      {

        $lang=Yii::app()->language;

        if ($lang=='uk') $lang='ua';

        if (!$model->hasAttribute($attribute.'_'.$lang))

            {throw new CHttpException(404,'Attribute is not valid!');}

                else return $model[$attribute.'_'.$lang];

      }