Добрый день, помогите разобраться, использую расширение OmgDef/yii2-multilingual-behavior, ругается на эту строчку:
public function actionIndex()
{
$data = new ActiveDataProvider([
'query' => FaqLang::find()->multilingual()->sort(), //на эту строчку ругается
]);
return $this->render('index', [
'data' => $data
]);
}
Как правильно решить проблему в моём случае?
Модель ActiveQuery:
<?
namespace admin\base;
/**
* Base active query class for models
* @package admin\base
*/
class ActiveQuery extends \yii\db\ActiveQuery
{
/**
* Order by order_num
* @return $this
*/
public function sort()
{
$this->orderBy(['order_num' => SORT_ASC]);
return $this;
}
}
Модель:
<?php
namespace admin\modules\faq\models;
use omgdef\multilingual\MultilingualBehavior;
use omgdef\multilingual\MultilingualQuery;
use Yii;
use admin\behaviors\CacheFlush;
use admin\behaviors\SortableModel;
/**
* This is the model class for table "admin_module_faq".
*
* @property int $id
* @property int|null $order_num
* @property int|null $status
*
* @property FaqLang[] $faqLang
*/
class Faq extends \admin\base\ActiveRecord
{
const STATUS_OFF = 0;
const STATUS_ON = 1;
const CACHE_KEY = 'admin_module_faq';
/**
* {@inheritdoc}
*/
public static function tableName()
{
return 'admin_module_faq';
}
/**
* {@inheritdoc}
*/
public function rules()
{
return [
// [['question','answer'], 'required'],
// [['question', 'answer'], 'trim'],
[['order_num', 'status'], 'integer'],
['status', 'default', 'value' => self::STATUS_ON],
];
}
/**
* {@inheritdoc}
*/
public function attributeLabels()
{
return [
'id' => Yii::t('admin', 'ID'),
'order_num' => Yii::t('admin', 'Order Num'),
'status' => Yii::t('admin', 'Status'),
// 'question' => Yii::t('admin', 'Вопрос'),
// 'answer' => Yii::t('admin', 'Ответ'),
'language' => Yii::t('admin', 'Язык'),
];
}
/**
* Gets query for [[FaqLang]].
*
* @return \yii\db\ActiveQuery
*/
public function getFaqLang()
{
return $this->hasMany(FaqLang::className(), ['faq_id' => 'id']);
}
public function behaviors()
{
return [
CacheFlush::className(),
SortableModel::className(),
'ml' => [
'class' => MultilingualBehavior::className(),
'languages' => [
'ru' => 'Русский',
'uz' => 'Узбекский',
],
'languageField' => 'language',
//'localizedPrefix' => '',
'requireTranslations' => true,
//'dynamicLangClass' => true',
'langClassName' => FaqLang::className(), // or namespace/for/a/class/PostLang
//'defaultLanguage' => 'ru',
'langForeignKey' => 'faq_id',
'tableName' => "{{%admin_module_faq_lang}}",
'attributes' => [
'question', 'answer',
]
],
];
}
public static function find()
{
return new MultilingualQuery(get_called_class());
}
}
Контроллер:
<?
namespace admin\modules\faq\controllers;
use Yii;
use yii\data\ActiveDataProvider;
use yii\widgets\ActiveForm;
use admin\modules\faq\models\Faq;
use admin\modules\faq\models\FaqLang;
use admin\behaviors\SortableController;
use admin\behaviors\StatusController;
class AController extends \admin\base\admin\Controller
{
public function behaviors()
{
return [
[
'class' => SortableController::className(),
'model' => FaqLang::className()
],
[
'class' => StatusController::className(),
'model' => FaqLang::className()
]
];
}
public function actionIndex()
{
$data = new ActiveDataProvider([
'query' => FaqLang::find()->multilingual()->sort(),
]);
return $this->render('index', [
'data' => $data
]);
}
public function actionCreate($slug = null)
{
$model = new FaqLang;
if ($model->load(Yii::$app->request->post())) {
if(Yii::$app->request->isAjax){
Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
return ActiveForm::validate($model);
}
else{
if($model->save()){
$this->flash('success', Yii::t('admin/faq', 'Элемент создан'));
return $this->redirect(['/admin/'.$this->module->id]);
}
else{
$this->flash('error', Yii::t('admin', 'Ошибка. {0}', $model->formatErrors()));
return $this->refresh();
}
}
}
else {
if($slug) $model->slug = $slug;
return $this->render('create', [
'model' => $model
]);
}
}
public function actionEdit($id)
{
$model = FaqLang::findOne($id);
if($model === null){
$this->flash('error', Yii::t('admin', 'Запись не найдена'));
return $this->redirect(['/admin/'.$this->module->id]);
}
if ($model->load(Yii::$app->request->post())) {
if(Yii::$app->request->isAjax){
Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
return ActiveForm::validate($model);
}
else{
if($model->save()){
$this->flash('success', Yii::t('admin/faq', 'Элемент обновлен'));
}
else{
$this->flash('error', Yii::t('admin', 'Ошибка при обновлении записи. {0}', $model->formatErrors()));
}
return $this->refresh();
}
}
else {
return $this->render('edit', [
'model' => $model
]);
}
}
public function actionDelete($id)
{
if(($model = FaqLang::findOne($id))){
$model->delete();
} else {
$this->error = Yii::t('admin', 'Запись не найдена');
}
return $this->formatResponse(Yii::t('admin/faq', 'Элемент удален'));
}
public function actionUp($id)
{
return $this->move($id, 'up');
}
public function actionDown($id)
{
return $this->move($id, 'down');
}
public function actionOn($id)
{
return $this->changeStatus($id, FaqLang::STATUS_ON);
}
public function actionOff($id)
{
return $this->changeStatus($id, FaqLang::STATUS_OFF);
}
}