2017-01-17 4 views
0

У меня есть две модели в форме. Одна модель является мастером, а одна модель представлена ​​как таблица соединений (модель).Важная информация в форме флага в yii2

Relation

Desc:

request_table : $model, 
link_req_tipe : $modelLinkReqTipe; 

Моя цель состоит в том,

  1. откладывает $ модели, то я получаю $ модели-> ID
  2. I пакетные вставки to link_req_item

    id_request = $ модели-> ID и id_tipe = modelLinkReqTipe-> id_tipe

Вот это PHP:

_form.php (только пример, потому что много много ввода форма)

<?= $form->field($model, 'karyawan_id')->dropDownList(
       ArrayHelper::map(Karyawan::find()->all(), 'id', 'first_name'), ['prompt' => 'Select Karyawan']) 
?> 

<?= $form->field($modelLinkReqTipe, 'id_tipe')->checkBoxList(ArrayHelper::map(TipeRequest::find()->all(), 'id', 'nama_tipe')); 
?> 

RequestController

if ($model->load($request->post()) && $modelLinkReqTipe->load(Yii::$app->request->post())) { 
    $valid = $model->validate(); 
    $valid = $modelLinkReqTipe->validate() && $valid; 

    if ($valid) { ## Check validate : true 
    $transaction = Yii::$app->db->beginTransaction(); 
    try { 
     if ($flag = $model->save(false)) { 
     foreach ($modelLinkReqTipe as $index => $modelLinkReqTipe) { 
       if ($flag === false) { 
       break; 
       } 

       $modelLinkReqTipe->id_request = $model->id; 
       if (!($flag = $modelLinkReqTipe->save(false))) { 
        break; 
       } 
     } 
     } 

     if ($flag) { 
     $transaction->commit(); 
     } else { 
     $transaction->rollBack() 
     } 
    } 
    catch (\Exception $e) { 
     $transaction->rollBack(); 
    } 

    return [ 
     'forceReload' => '#crud-datatable-pjax', 
     'title' => "Create new Request", 
     'content' => '<h1 class="text-success">Success</h1>, 
     'footer' => Html::button('Close', ['class' => 'btn btn-default pull-left', 'data-dismiss' => "modal"]) . 
        Html::a('Create More', ['create'], ['class' => 'btn btn-primary', 'role' => 'modal-remote']) 
       ]; 

    }else{ ## Check validate : false 
    return [ 
     'title' => "Create New Request", 
     'content' => $this->renderAjax('create', [ 
      'model' => $model, 
      'modelLinkReqTipe' => (empty($modelLinkReqTipe)) ? new LinkReqTipe() : $modelLinkReqTipe, 
      'modelLinkReqItem' => (empty($modelLinkReqItem)) ? [new LinkReqItem] : $modelLinkReqItem, 
        ]), 
     'footer' => Html::button('Close', ['class' => 'btn btn-default pull-left', 'data-dismiss' => "modal"]) . 
        Html::button('Save', ['class' => 'btn btn-primary', 'type' => "submit"]) 
       ]; 
      } 

Теперь валидация в неисправности, оно всегда возвращает false в submit. false validation Обратите внимание.

ответ

1

Существует много способов решить эту проблему. Я думаю, что лучший способ убедиться, что атрибут $modelLinkReqTipe не принимается во внимание при проверке, заключается в предоставлении функции validate() с массивом атрибутов, который вы хотите проверить: validate(['id_tipe'])