braun_alex
@braun_alex
Новичёк

Как вывести данные в виджете yii2-multiple-input после сохранения?

Уже пол дня мучаюсь с выводом данных через виджет 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'],
        ];
    }
  • Вопрос задан
  • 245 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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