Ошибка Calling unknown method: omgdef\multilingual\MultilingualQuery::sort()?

Добрый день, помогите разобраться, использую расширение 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);
    }
}
  • Вопрос задан
  • 101 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы