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

21 Авг 2019 в 07:03
276 +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 Апр 2024 в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир