2015-09-24 3 views
1

Я хотел бы объяснить мою проблему четко, Am помощью wbraganca/yii2-dynamicform Здесь create actio п работает отлично, но в update действия problemYii2 Динамическое обновление формы действий не работает

В коде, который я отметил, я не» я знаю, что мне нужно сделать, у меня нет такого поля (addresses) в customer таблице. Я застрял на этом.

предположим, если я создать переменную в модели как public $addressess, это делает меня перезарядку стол еще раз, и эту причину, а обновить ту же форму, данных становится перезарядку и форма просмотра, как пустой, без пустой,

если создать функция на это имя, я не знаю, что писать об этом .. Am просто используя код как этот

public function getaddressess() 
{ 

} 

Создать код Действие

public function actionCreate() 
    { 
     $modelCustomer = new Customer; 
     $modelsAddress = [new Address]; 
     if ($modelCustomer->load(Yii::$app->request->post())) { 

      $modelsAddress = Model::createMultiple(Address::classname()); 
      Model::loadMultiple($modelsAddress, Yii::$app->request->post()); 

      // ajax validation 
      if (Yii::$app->request->isAjax) { 
       Yii::$app->response->format = Response::FORMAT_JSON; 
       return ArrayHelper::merge(
        ActiveForm::validateMultiple($modelsAddress), 
        ActiveForm::validate($modelCustomer) 
       ); 
      } 

      // validate all models 
      $valid = $modelCustomer->validate(); 
      $valid = Model::validateMultiple($modelsAddress) && $valid; 

      if ($valid) { 
       $transaction = \Yii::$app->db->beginTransaction(); 
       try { 
        if ($flag = $modelCustomer->save(false)) { 
         foreach ($modelsAddress as $modelAddress) { 
          $modelAddress->customer_id = $modelCustomer->id; 
          if (! ($flag = $modelAddress->save(false))) { 
           $transaction->rollBack(); 
           break; 
          } 
         } 
        } 
        if ($flag) { 
         $transaction->commit(); 
         return $this->redirect(['view', 'id' => $modelCustomer->id]); 
        } 
       } catch (Exception $e) { 
        $transaction->rollBack(); 
       } 
      } 
     } 

     return $this->render('create', [ 
      'modelCustomer' => $modelCustomer, 
      'modelsAddress' => (empty($modelsAddress)) ? [new Address] : $modelsAddress 
     ]); 
    } 

Помогите мне разобраться в этой проблеме

+0

Am также сталкивается с той же проблемой, ответ будет оценил ... –

+0

какие у вас ошибки? Более конкретно. –

+0

Просьба предоставить alse код actionCreate ... – scaisEdge

ответ

0

Это должно быть getAddresses() вместо getaddresses() (хотя и может работать, я бы с первым встретить конвенции). Или вы можете установить public $addresses, если вам не нужна дополнительная инкапсуляция.

suppose if i create a variable in model like public $addressess, it makes me the reload the table again, and that cause while update the same form, data's getting reload and form viewing as empty without empty, 

Я думаю, что у вас есть вопрос проверки - не валидатор, чтобы пометить поле как безопасный и вы видите его как пустой после отправки.

  1. Добавить public $addresses в модель вашего Клиента.
  2. Добавить «адреса» в ваш validation rules как безопасный (или более подходящий валидатор). Таким образом, после отправки формы, он, вероятно, не будет пустым.
+0

при выполнении проверки для $ addressess также пустым полем является рендеринг при обновлении – Nodemon

0

Этот код строки --->$ modelsAddress = $ modelCustomer-> address;

это получить от модели для клиента в строке --->функции getAddresses общественного()

это публичная функция строка кода является кодом прибудет массив связанной таблицу от активного метода записи на yii2.

0

$ modelCustomer-> обращается к словам, адреса должны поступать из модели модели model model. У вас должно быть отношение к другой таблице, где вы добавляете несколько значений. В моем примере, описанном в видео, у меня есть две таблицы po table и таблица po_items. Таблица po_items имеет внешний ключ po_id. Поэтому, когда вы создаете Модели с помощью gii, вы получите отношения в модели, которые вы должны использовать вместо адресов.

отношение по моей базе данных должно быть - poItems вы увидите это в строке 14

1

$modelsAddress=$modelCustomer->addresses в этом примере означает массив связанных Address() экземпляров

public function actionCreate() 
     { 
      $modelCustomer = new Customer; 
      $modelsAddress = $this->getaddressess($modelCustomer->id); 

    //................... 
    } 



    public function getaddressess($id) 
    { 
     $model = Address::find()->where(['id' => $id])->all(); 
     return $model; 
    } 
Смежные вопросы