OmgDef / yii2-multilingual-behavior

Yii2 port of the yii-multilingual-behavior.
146 stars 60 forks source link

Doesn't Wok #29

Closed CyanoFresh closed 9 years ago

CyanoFresh commented 9 years ago

Please help me. Works only portfolio table, portfolioLang doesn't. I've done all sticky for instruction. When I create model in the CRUD - portfolio table saves but portfolioLang doesn't. Portfolio Model:

<?php

namespace app\models;

use omgdef\multilingual\MultilingualBehavior;
use omgdef\multilingual\MultilingualQuery;
use Yii;

/**
 * This is the model class for table "{{%portfolio}}".
 *
 * @property integer $id
 * @property string $time
 * @property string $slug
 * @property string $url
 *
 * @property PortfolioLang[] $portfolioLangs
 */
class Portfolio extends \yii\db\ActiveRecord
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return '{{%portfolio}}';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['time', 'slug', 'url'], 'required'],
            [['time', 'slug', 'url'], 'string', 'max' => 255]
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'id' => Yii::t('app', 'ID'),
            'time' => Yii::t('app', 'Time'),
            'slug' => Yii::t('app', 'Slug'),
            'url' => Yii::t('app', 'Url'),
        ];
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getPortfolioLangs()
    {
        return $this->hasMany(PortfolioLang::className(), ['portfolio_id' => 'id']);
    }

    public function behaviors()
    {
        return [
            'ml' => [
                'class' => MultilingualBehavior::className(),
                'languages' => [
                    'ru' => 'Russian',
                    'en' => 'English',
                ],
                //'languageField' => 'language',
                //'localizedPrefix' => '',
                //'requireTranslations' => false',
                'dynamicLangClass' => 'false',
                'langClassName' => PortfolioLang::className(),
                'defaultLanguage' => 'en',
                'langForeignKey' => 'portfolio_id',
                'tableName' => "{{%portfolioLang}}",
                'attributes' => [
                    'name', 'description', 'skills',
                ]
            ],
        ];
    }

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

PortfolioLang Model:

<?php

namespace app\models;

use Yii;

/**
 * This is the model class for table "{{%portfolioLang}}".
 *
 * @property integer $id
 * @property integer $portfolio_id
 * @property string $language
 * @property string $name
 * @property string $description
 * @property string $skills
 *
 * @property Portfolio $portfolio
 */
class PortfolioLang extends \yii\db\ActiveRecord
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return '{{%portfolioLang}}';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['portfolio_id', 'language', 'name', 'description', 'skills'], 'required'],
            [['portfolio_id'], 'integer'],
            [['skills'], 'string'],
            [['language', 'name', 'description'], 'string', 'max' => 255]
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'id' => Yii::t('app', 'ID'),
            'portfolio_id' => Yii::t('app', 'Portfolio ID'),
            'language' => Yii::t('app', 'Language'),
            'name' => Yii::t('app', 'Name'),
            'description' => Yii::t('app', 'Description'),
            'skills' => Yii::t('app', 'Skills'),
        ];
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getPortfolio()
    {
        return $this->hasOne(Portfolio::className(), ['id' => 'portfolio_id']);
    }
}

View file:

<?php

use yii\helpers\Html;
use yii\widgets\ActiveForm;

/* @var $this yii\web\View */
/* @var $model app\models\Portfolio */
/* @var $form yii\widgets\ActiveForm */
?>

<div class="portfolio-form">

    <?php $form = ActiveForm::begin(); ?>

    <h2>Main fields</h2>

    <?= $form->field($model, 'time')->textInput(['maxlength' => true]) ?>

    <?= $form->field($model, 'slug')->textInput(['maxlength' => true]) ?>

    <?= $form->field($model, 'url')->textInput(['maxlength' => true]) ?>

    <h2>RU fields</h2>

    <?= $form->field($model, 'name_ru')->textInput(['maxlength' => true]) ?>
    <?= $form->field($model, 'description_ru')->textInput(['maxlength' => true]) ?>
    <?= $form->field($model, 'skills_ru')->textInput(['maxlength' => true]) ?>

    <h2>EN fields</h2>

    <?= $form->field($model, 'name')->textInput(['maxlength' => true]) ?>
    <?= $form->field($model, 'description')->textInput(['maxlength' => true]) ?>
    <?= $form->field($model, 'skills')->textInput(['maxlength' => true]) ?>

    <div class="form-group">
        <?= Html::submitButton($model->isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
    </div>

    <?php ActiveForm::end(); ?>

</div>
CyanoFresh commented 9 years ago

I run xdebug and saw that attributes had null value

CyanoFresh commented 9 years ago

Also option requireTranslations doesn't work

CyanoFresh commented 9 years ago

Now I set rules for translation fields and it works fine! Thanks for the plugin!