Как переопределить базовый метод в yii2? Всем привет! Вопрос заключается в следующим. Есть базовый класс BaseYii в Yii2. В этом классе содержится метод t(). Сейчас я использую yii\i18n\DbMessageSource для переводов, которые хранятся в базе. Перевод можно получиться при помощи вызова метода t() с соответствующими аргументами.
Задача заключается в том, чтобы дописывать в базу переводы, если их еще там нету, при вызове метода t(). Например, вызываем t('category', 'title'), оно само должно проверять есть ли перевод в базе и дописывать его, если его там нету. Как я могу это делать, если я хочу вызывать все тот же Yii::t() в своем приложении?
Простите, если не совсем точно описал, это мой первый вопрос.

21 Авг 2019 в 07:03
231 +1
0
Ответы
1

Для переопределения метода t() в Yii2 можно использовать наследование и создать свой собственный класс, который будет расширять класс yii\BaseYii. В этом новом классе можно переопределить метод t() и добавить необходимую логику для проверки и дополнения переводов в базе.

Пример кода:

namespace app\components;
use Yii;
class MyYii extends \yii\BaseYii
{
public static function t($category, $message, $params = [], $language = null)
{
// Проверяем, есть ли перевод в базе
$translation = Yii::$app->db->createCommand('SELECT translation FROM translations WHERE category = :category AND message = :message')
->bindValue(':category', $category)
->bindValue(':message', $message)
->queryScalar();
if(!$translation){
// Если перевода нет, то дописываем его в базу
Yii::$app->db->createCommand()->insert('translations', [
'category' => $category,
'message' => $message,
'translation' => $message, // Здесь можно использовать любой метод для формирования перевода
])->execute();
}
// Вызываем оригинальный метод t() для получения перевода
return parent::t($category, $message, $params, $language);
}
}

Теперь в вашем приложении вместо вызова Yii::t() можно использовать MyYii::t(). Таким образом, при вызове метода t() будет происходить проверка наличия перевода в базе и его дополнение, если его нет.

20 Апр в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 093 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир