bessonov87/yii2-mongodb-multilingual-behavior

yii2-mongodb-multilingual-behavior for mongodb

dev-master 2016-03-10 10:33 UTC

This package is not auto-updated.

Last update: 2024-09-20 18:36:12 UTC


README

Yii2 MongoDb 的 yii2-multilingual-behavior 端口。

Packagist Version Total Downloads Build Status Code Quality Code Coverage

此行为允许您创建多语言模型,并且几乎可以像使用普通模型一样使用它们。翻译存储在数据库中的单独表中(例如:PostLang 或 NewsLang),每个模型一个,因此您可以轻松地添加或删除语言,而无需修改您的数据库。

示例

如果您在 find() 查询中使用 multilingual(),则每个模型的翻译都作为虚拟属性(title_en、title_fr、title_de 等)加载。

$model = Post::find()->multilingual()->one();
echo $model->title_en; //echo "English title"
echo $model->title_fr; //echo "Titre en Français"

安装

安装此扩展的首选方法是使用 composer

运行以下命令之一:

php composer.phar require --prefer-dist bessonov87/yii2-mongodb-multilingual-behavior

或将其添加到您的 composer.json 文件的 require 部分:

"bessonov87/yii2-mongodb-multilingual-behavior": "*"

行为属性

加粗的属性是必需的

用法

以下是一个基础 'news' 表的示例

将此行为附加到模型(示例中的 News)。注释字段具有默认值。

public function behaviors()
{
    return [
        'ml' => [
            'class' => MultilingualBehavior::className(),
            'languages' => [
                'en-US' => 'English',
		'de' => 'German',
            ],
            //'languageField' => 'language',
            //'localizedPrefix' => '',
            //'requireTranslations' => false',
            //'dynamicLangClass' => true',
            //'langClassName' => PostLang::className(), // or namespace/for/a/class/PostLang
            'defaultLanguage' => 'en',
            'langForeignKey' => 'post_id',
            'tableName' => "newsLang",
            'attributes' => [
                'title', 'text',
            ]
        ],
    ];
}

然后您必须覆盖模型中的 find() 方法

    public static function find()
    {
        return new MultilingualQuery(get_called_class());
    }

由于此行为具有 MultilingualTrait,您可以在查询类中使用它

namespace app\models;

use yii\mongodb\ActiveQuery;

class MultilingualQuery extends ActiveQuery
{
    use MultilingualTrait;
}

表单示例

//title will be saved to model table and as translation for default language
$form->field($model, 'title')->textInput(['maxlength' => 255]);
$form->field($model, 'title_en')->textInput(['maxlength' => 255]);