2016-07-15 3 views
3

내 모델에서 다른 시나리오를 만들었습니다. 나는 둘 다 생성되고 갱신 된 메소드를 렌더링하는 하나의 형식을 가지고있다. 난 단지 내 이메일, 이름과 마지막 이름이 양식에서 렌더링 할 업데이트 시나리오를 사용에작성 및 업데이트 시나리오의 Yii2 다른 양식 필드

Form.php

<?php $form = ActiveForm::begin(); ?> 

<?= $form->errorSummary($model, $options = ['header'=>'', 'class'=>'pull-left errorDiv']); ?> 

      <?= $form->field($model, 'user_fname')->textInput(['class'=>'form-control']);?> 
      <?= $form->field($model, 'user_lname')->textInput(['class'=>'form-control']); ?> 
      <?= $form->field($model,'user_email')->textInput(['class'=>'form-control']); ?> 
      <?= $form->field($model, 'user_password_hash')->passwordInput([]); ?> 
      <?= $form->field($model, 'user_password_hash_repeat')->passwordInput(['class'=>'form-control']); ?> 
      <?php $items = ArrayHelper::map(SimAuthAssignment::find()->all(),'item_name' ,'item_name');?> 
      <?= $form->field($mode, 'item_name')->dropDownList($items,[]);?> 

<div class="form-group"> 
    <?= Html::submitButton($model->isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> 
</div> 

<?php ActiveForm::end(); ?> 

을 다음과 같이 양식 필드입니다.

const SCENARIO_REGISTER = 'signup'; 
const SCENARIO_CREATE = 'create'; 
const SCENARIO_UPDATE = 'update'; 

public function scenarios() 
{ 
    return [ 

      self::SCENARIO_REGISTER => ['user_email', 'user_password_hash', 'user_fname', 'user_lname', 'agree','!user_password_hash_repeat','required'], 
      self::SCENARIO_CREATE => ['user_email', 'user_password_hash', 'user_fname', 'user_lname','!user_password_hash_repeat','required'], 
      self::SCENARIO_UPDATE => ['user_email', 'user_fname', 'user_lname', 'required'], 
    ]; 
} 

public static function tableName() 
{ 
    return 'sim_user'; 
} 

그리고 내 컨트롤러 업데이트 방법에서 아래 코드와 같은 시나리오를 사용하고 있습니다.

public function actionUpdate($id) 
    { 
     $model = $this->findModel($id); 
     $model->scenario = SimUser::SCENARIO_UPDATE; 
     // var_dump($model->scenario); exit(); 
     $mode = \app\modules\auth\models\SimAuthAssignment::find()->where(['user_id' => $id])->one(); 


     if ($model->load(Yii::$app->request->post())&& $mode->load(Yii::$app->request->post())) { 
      $model->save(); 

      return $this->redirect(['view', 'id' => $model->user_id]); 
     } else { 
      return $this->renderAjax('update', [ 
       'model' => $model, 
       'mode' => $mode, 
      ]); 
     } 
    } 

전자 메일, 성 및 성 양식 필드 만 편집 할 때 양식에 표시하고 싶습니다. 편집 할 때 양식의 다른 필드를 무시하고 싶습니다. 내가 여기서 무엇을 놓치고 있니? 감사!! 당신이 가진의 ActiveForm을 사용하는

+0

"컨트롤러를 업데이트 할 때 전자 메일, 성 및 양식 필드 만 가져 오십시오"는 의미는 어디에서 .. 컨트롤러에서. 제출 후 ..? 당신도 다른 fileds .. teh있다? 제발 더 설명해주세요. – scaisEdge

+0

나는 사용자를 편집 할 때 양식의 전자 메일, 이름 및 성 필드 만 렌더링해야한다고 말합니다. –

+0

모델로 작업하고 있습니다 .. 모델에 모든 필드가 포함되어 있습니다 .. – scaisEdge

답변

1

모든 inputField 만 이메일, 이름 원한다면 .. 그래서 모든 필드에 .. 제출하고 LASTNAME 당신은 onnly이 분야에 또 다른 뷰를 사용한다

<?php $form = ActiveForm::begin(); ?> 

<?= $form->errorSummary($model, $options = ['header'=>'', 'class'=>'pull-left errorDiv']); ?> 

      <?= $form->field($model, 'user_fname')->textInput(['class'=>'form-control']);?> 
      <?= $form->field($model, 'user_lname')->textInput(['class'=>'form-control']); ?> 
      <?= $form->field($model,'user_email')->textInput(['class'=>'form-control']); ?> 

<div class="form-group"> 
    <?= Html::submitButton($model->isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> 
</div> 

<?php ActiveForm::end(); ?> 

시나리오 다음에 판결 한 필드 만 확인하십시오. 제출하면 필요한 데이터 만 반환됩니다.