Уже пол дня мучаюсь с выводом данных через виджет
yii2-multiple-input не хочет работать.
В документации мало примеров лично для меня.
Данные хранятся у меня в базе данных в 5 ячейках.
До добавления любой записи через MultipleInput ошибок нет и форма на странице работает как надо. Как только добавляю хоть 1 запись(или 5), форма отрабатывает, всё сохраняется в базу и перестаёт открываться страница с ошибкой:
Error
Call to a member function hasErrors() on array
1. in W:\domains\finderlot.ru\yii2\vendor\yiisoft\yii2\widgets\ActiveField.php
Я так понимаю что форма ждёт 1 запись для вывода, а приходит массив? Но с другой стороны если я подставляю связь(тежи самые данные но только через связь) <?= $form->field($model->priceschange, 'prices_list')->widget(MultipleInput::className(), то страница снова начинает открываться.
В форме виджета поля вызываю так:
<?= $form->field($model_price_change, 'prices_list')->widget(MultipleInput::className(), [
'id' => 'price_change',
'max' => 50,
'min' => 0,
'allowEmptyList' => false,
'enableGuessTitle' => true,
'sortable' => true,
//'data' => $model_price_change,
'columns' => [
[
'name' => 'date_start',
'title' => 'Дата начала',
'type' => DateTimePicker::className(),
'options' => [
'pluginOptions' => [
'minView' => '3',
'maxView' => '3',
'format' => 'dd.mm.yyyy hh:ii:ss', // формат который будет передаваться в базу
'autoclose' => true,
'weekStart' => 1,
'startDate' => date('01.01.2020'), //дата ниже которой нельзя установить значение
]
]
],
[
'name' => 'date_end',
'title' => 'Дата окончания',
'type' => DateTimePicker::className(),
// 'value' => function($data) {
// return $data['date_end'];
// },
'options' => [
'pluginOptions' => [
'minView' => '3',
'maxView' => '3',
'format' => 'dd.mm.yyyy hh:ii:ss', // формат который будет передаваться в базу
'autoclose' => true,
'weekStart' => 1,
'startDate' => date('01.01.2020'), //дата ниже которой нельзя установить значение
]
]
],
[
'name' => 'price',
'title' => 'Цена',
'type' => 'textInput',
// 'value' => function($data) {
// return $data['price'];
// },
'options' => [
'placeholder' => 'В рублях',
]
],
[
'name' => 'deposit',
'title' => 'Задаток',
'type' => 'textInput',
// 'value' => function($data) {
// return $data['deposit'];
// },
'options' => [
'placeholder' => 'В рублях',
]
],
],
'iconSource' => 'fa',
'addButtonOptions' => [
'class' => 'btn btn-success',
],
'addButtonPosition' => MultipleInput::POS_HEADER
])
->label(false);
?>
В контроллере данные подгружаю так:
$model_price_change = oldPrices::find()->where(['lot_id' => $id])->all();
if($model_price_change == null && empty($model_price_change))
{
return new oldPrices();
} else {
return $model_price_change;
}
В модели так:
public $prices_list;
public function rules()
{
return [
[['price', 'deposit'], 'string'],
[['created_at', 'updated_at', 'date_start', 'date_end', 'prices_list'], 'safe'],
];
}