Ошибка “Call to a member function isAttributeRequired() on array” при использовании ActiveForm в Yii2

207
29 ноября 2018, 03:10

Модель:

class Film extends FilmBase
{
    public function getProducers()
    {
        return $this->hasMany(AllProducers::class, ['producer_id' => 'producer_id'])->viaTable('film_producers', ['film_id' => 'id']);
    }
}

Контроллер:

 public function actionUpdate($id)
    {
        $film = Film::findOne($id);
        $allProducers = ArrayHelper::map(AllProducers::find()->all(), 'producer_id', 'producer');
        $filmProducers = $film->getProducers()->all();

        if ($film->load(Yii::$app->request->post())
            && $filmProducers->load(Yii::$app->request->post())) {
            $isValid = $film->validate();
            $isValid = $filmProducers->validate() && $isValid;
            if ($isValid) {
                $film->save(false);
                foreach ($filmProducers as $filmProducer) {
                    $modelProducer = new FilmProducers();
                    $modelProducer->film_id = $film->id;
                    $modelProducer->producer_id = $filmProducer;
                    $modelProducer->save(false);
                }
                return $this->redirect(['film/view', 'id' => $id]);
            }
        }

Форма:

<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]) ?>
<?= $form->field($film, 'imgUpload')->fileInput() ?>
<?= $form->field($film, 'title')->textInput(['maxlength' => true]) ?>
<?= $form->field($film, 'preview')->textInput(['maxlength' => true]) ?>
<?= $form->field($film, 'description')->textarea(['rows' => 6]) ?>
<?= $form->field($filmProducers, 'producer[]')->widget(Select2::class, [
    'data' => array_merge(["" => ""], $allProducers),
    'language' => 'ru',
    'options' => [
        'placeholder' => 'Выберите режиссера...',
        'multiple' => true
    ],
    'pluginOptions' => [
        'allowClear' => true
    ],
])->label('Режиссер'); ?>
<div class="form-group">
    <?= Html::submitButton('Save', ['class' => 'btn btn-success']) ?>
</div>
<?php ActiveForm::end(); ?>

Ошибка: Call to a member function isAttributeRequired() on array

Вопрос: Как сделать в форме мультиселект, в котором отображались бы уже сохраненные в БД данные?

Answer 1
<?= $form->field($film, 'producer')->widget(Select2::class, ...

И сохранение данного поля придется делать ручками

READ ALSO
PHP Выполнять скрипт на фоне

PHP Выполнять скрипт на фоне

Интересует вопрос как можно реализовать задуманное: Пользователь нажимает кнопку "Сбор данных", на фоне запускается мой скрипт, он делает...

212
laravel timestamps()

laravel timestamps()

В $table->timestamps(); создает два поля: create_at , update_atНо они по дефолту равны 0

168
Как добавить if к ALTER TABLE

Как добавить if к ALTER TABLE

Я пытаюсь создать базу данных журнала

237
Бот не отправляет сообщения VK API

Бот не отправляет сообщения VK API

Хочу написать своего бота для группы, но он не отправляет сообщения

185