Подскажите с loadMultiple

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Vindective
Сообщения: 87
Зарегистрирован: 2014.04.18, 14:21

Подскажите с loadMultiple

Сообщение Vindective »

Использую плагин https://github.com/unclead/yii2-multiple-input при отправке запроса в Post уходит

Код: Выделить всё

_csrf:ZUtITWtEdHY1KCR0O309MA4MLHw.dBJPAx8yehghNh9cBHB7RjxZHw==
Contact[0][contact_value]:3
Contact[1][contact_value]:4
Contact[2][contact_value]:5
ajax:w0
но при использовании loadMultiple загружается только первый элемент

Код: Выделить всё

if (Model::loadMultiple($contacts, Yii::$app->request->post())) {
    var_dump($contacts);exit; // вот тут в $contacts только 1 элемент
}
что не так?
caHek2x
Сообщения: 1240
Зарегистрирован: 2016.04.12, 20:41

Re: Подскажите с loadMultiple

Сообщение caHek2x »

покажите выше ... как вы инициализировали $contacts
Vindective
Сообщения: 87
Зарегистрирован: 2014.04.18, 14:21

Re: Подскажите с loadMultiple

Сообщение Vindective »

caHek2x писал(а):покажите выше ... как вы инициализировали $contacts

Код: Выделить всё

public function actionContact()
    {
        $contacts = UserContact::find()->where(['user_id' => Yii::$app->user->identity->id])->all() ?: [new UserContact()];

        if (Model::loadMultiple($contacts, Yii::$app->request->post()) && Model::validateMultiple($contacts)) {
            foreach ($contacts as $contact) {
                $contact->save(false);
            }
            return $this->redirect('index');
        }
    
        return $this->render('contact', ['models'=>$contacts]);
    }
caHek2x
Сообщения: 1240
Зарегистрирован: 2016.04.12, 20:41

Re: Подскажите с loadMultiple

Сообщение caHek2x »

в loadMultiple мы должны отправлять первым параметром массив моделей равным тому который приходит вам из формы ...

Код: Выделить всё

        
if (Yii::$app->request->isPost) {
   $contacts=[];
   foreach($Yii::$app->request->post('Contact', []) as $model) {
      $contacts[] = new UserContact();
   }
   if (UserContact::loadMultiple($contacts, Yii::$app->request->post()) && UserContact::validateMultiple($contacts)) {
      foreach ($contacts as $contact) {
         $contact->save(false);
      }
      return $this->redirect('index');
   }
} 
Последний раз редактировалось caHek2x 2016.08.19, 00:39, всего редактировалось 1 раз.
Vindective
Сообщения: 87
Зарегистрирован: 2014.04.18, 14:21

Re: Подскажите с loadMultiple

Сообщение Vindective »

caHek2x писал(а):в loadMultiple мы должны отправлять первым параметром массив моделей равным тому который приходит вам из формы ...

Код: Выделить всё

        
if (Yii::$app->request->isPost) {
   $contacts=[];
   foreach($Yii::$app->request->post('Contact', []) as $model) {
      $contacts[] = new UserContact();
   }
   if (UserContact::loadMultiple($contacts, Yii::$app->request->post()) && UserContact::validateMultiple($contacts)) {
      foreach ($contacts as $contact) {
         $contact->save(false);
      }
      return $this->redirect('index');
   }
}
cпасибо
yii2Developer
Сообщения: 85
Зарегистрирован: 2016.07.07, 12:10

Re: Подскажите с loadMultiple

Сообщение yii2Developer »

Подскажите мне, все делаю так у вас
Но при отправке ошибка, Either 'name', or 'model' and 'attribute' properties must be specified. В логах видно что массив $POST передает данные

Код: Выделить всё

    [
    'phone' => [
        0 => '78787'
        1 => '87878978'
    ]
] 
Код actionCreate

Код: Выделить всё

 public function actionCreate()
    {
        $model = new Phones();

        if ($model->load(Yii::$app->request->post())) {
            $phones = [];
            foreach (Yii::$app->request->post('Phones', []) as $model) {
                $phones[] = new Phones();
            }
            if (Phones::loadMultiple($phones, Yii::$app->request->post()) && Phones::validateMultiple($phones)) {
                foreach ($phones as $item) {
                    $item->save(false);
                }
                return $this->redirect('index');
            }
        }
        return $this->render('create', ['model' => $model]);
    } 
Код в create

Код: Выделить всё

<?php $form = ActiveForm::begin(); ?>
    <?= $form->field($model, 'phone')->widget(MultipleInput::className(), [
        'limit'             => 5,
        'allowEmptyList'    => false,
        'enableGuessTitle'  => true,
        'min'               => 2, // should be at least 2 rows
    ])->label(false); ?>

    <div class="form-group">
        <?= Html::submitButton('Create', ['class' => 'btn btn-primary']) ?>
    </div>
    <?php ActiveForm::end(); ?>
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: Подскажите с loadMultiple

Сообщение futbolim »

Ну добавьте в MultipleInput "Either 'name', or 'model' and 'attribute' properties".
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Подскажите с loadMultiple

Сообщение zelenin »

$contacts = UserContact::find()->where(['user_id' => Yii::$app->user->identity->id])->all() ?: [new UserContact()];

ути, какая милая ошибка.
yii2Developer
Сообщения: 85
Зарегистрирован: 2016.07.07, 12:10

Re: Подскажите с loadMultiple

Сообщение yii2Developer »

futbolim писал(а):Ну добавьте в MultipleInput "Either 'name', or 'model' and 'attribute' properties".
Типа вот так?

Код: Выделить всё

  <?= $form->field($model, 'phone')->widget(MultipleInput::className(), [
        'name' => 'phone',
        
        'limit'             => 10,
        'allowEmptyList'    => false,
        'enableGuessTitle'  => true,
        'min'               => 2, 
    ])->label(false); ?>
А какой смысл этого? И тогда новая ошибка - Call to a member function getFirstError() on array. ..
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: Подскажите с loadMultiple

Сообщение futbolim »

Виджету нужна привязка к чему-то. Иначе он будет бессмысленным.
Только у Вас $model есть. Её вместе с атрибутом укажите.
yii2Developer
Сообщения: 85
Зарегистрирован: 2016.07.07, 12:10

Re: Подскажите с loadMultiple

Сообщение yii2Developer »

futbolim писал(а):Виджету нужна привязка к чему-то. Иначе он будет бессмысленным.
Только у Вас $model есть. Её вместе с атрибутом укажите.
Что-то не могу понять, так $form->field($model, 'phone')-> тут же и модель и атрибут указан. Какая тогда привязка должна быть? Или точнее где именно?

Код: Выделить всё

 <?= $form->field($model, 'phone')->widget(MultipleInput::className(), [
        'limit'             => 10,
        'allowEmptyList'    => false,
        'enableGuessTitle'  => true,
        'min'               => 2, // should be at least 2 rows
    ]); ?>
Что не так с этой записью, потому, что если ($model, 'phone') заменить на ($model, 'randomtext') нету ошибки Getting unknown property ?? Или это сам виджет такой?
Ответить