Gadz
@Gadz

Yii2, activerecord — как записать и провалидировать поле select miltiple?

1. Собственно в контроллере:

$model = new Model;
$model->load(Yii::$app->request->post());
if($model->validate()) {
 $model->save();
}


2. Во view
<select name=Model['select'] multiple>
  <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="opel">Opel</option>
  <option value="audi">Audi</option>
</select>


Есть ли стандартная возможность записи и валидации массива через activerecord? Или нужно писать свой валидатор для этого поля? И как можно записать в таком случае значения из массива как строки insert?
  • Вопрос задан
  • 219 просмотров
Решения вопроса 1
slo_nik
@slo_nik Куратор тега Yii
Добрый вечер.
Попробуйте так.
В модели:
public $select_list;
    public function rules()
    {
        return [
              ['select_list', 'required'],
              ['select_list', 'each', 'rule' => ['integer']]
        ];
    }

    public static function getValuesArray()
    {
        return [
           'first' => 'first',
           '1' => 'second',
           '2' => 'third'
        ];
    }


В виде, в ActiveForm:
<?= $form->field($model, 'select_list')->dropDownList(CheckText::getValuesArray(),['multiple' => true]) ?>


Выбираете второй или третий пункт - валидация проходит, если выбираете первый и второй(третий), то валидация не проходит, требует целое число.

p.s. CheckText название модели, измените на своё значение
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
mhthnz
@mhthnz
PHP, YII2, Golang, Linux
Для такого рода полей, обычно применяется MySQL тип SET, который позволяет выбирать несколько значений. Есть поведение, которое автоматически конвертирует в массив и из массива:
https://github.com/mhthnz/yii2-helpful-behaviors#y...

Что касается вашего кода:
public function rules()
{
    return [
        ['select', 'required'],
        ['select', 'each', 'rule' => ['in', 'range' => ['volvo', 'saab', 'opel', 'audi']]],
    ];
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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