Yii2从视图到模型的转移逻辑

时间:2017-02-15 11:03:30

标签: yii2

我想安排好我的代码。我有这个,由giiant生成:

$form->field($model, 'land_id')->dropDownList(ArrayHelper::map(app\models\Land::find()->orderBy('name')->all(), 'id', 'name'), [
                'prompt' => Yii::t('app', 'Select'),
                'disabled' => (isset($relAttributes) && isset($relAttributes['land_id'])),]);

有人在stackoverflow上告诉我,这不是很好。所以我想转移这部分:

ArrayHelper::map(app\models\Land::find()->orderBy('name')->all(), 'id', 'name'

进入模型。这同样适用于网格过滤器下拉列表:

'filter' => ArrayHelper::map(\app\models\base\Land::find()->asArray()->all(), 'id', 'name'),

有意义吗?我想是的,我希望如此。我试图以模型Land 2的方式实现它:

public function getAllAsArray() {
    return ArrayHelper::map(app\models\Land::find()->orderBy('name')->all(), 'id', 'name');
}

public function getAllAsArray() {
    return ArrayHelper::map($this->find()->orderBy('name')->all(), 'id', 'name');
}

我想从View / Grid(Zip-Land)中调用它:

'filter' => $model->land->allAsArray,

但是我收到以下错误: 未定义的变量:模型

然后尝试了这种方式:

'filter' => function ($model) {$model->getLand()->one()->getAllAsArray();},
'filter' => function ($model) {$model->getLand()->getAllAsArray();},

然后我没有收到任何错误消息,但它也无效。

并以表格(Zip - Land)的方式相同:

$form->field($model, 'land_id')->dropDownList($model->land->allAsArray(), [
            'prompt' => Yii::t('app', 'Select'),
            'disabled' => (isset($relAttributes) && isset($relAttributes['land_id'])),]);

但是我收到以下错误: 在null

上调用成员函数getAllAsArray()

你能指点我正确的方向吗?我想我基本上不明白,这让我感到不安。非常感谢你提前!

1 个答案:

答案 0 :(得分:0)

土地模型

public static function getAllAsArray() {
    return ArrayHelper::map(Land::find()->orderBy('name')->all(), 'id', 'name');
}

<强>索引

use app\models\Land;

'filter' => Land::getAllAsArray(),

<强>形式

use app\models\Land;

$form->field($model, 'land_id')->dropDownList(Land::getAllAsArray(), [
        'prompt' => Yii::t('app', 'Select'),
        'disabled' => (isset($relAttributes) && isset($relAttributes['land_id']))]);