2016-09-16 42 views
0

我試圖將一個DateTimePicker控件到的ActiveForm在Yii2作爲一個字段這樣的觀點:Yii2的ActiveForm場小部件不張貼值模型

$form->field($model, 'date_from')->widget(DateTimePicker::className(), 
    [ 
     'value' => '2013-01-01T00:00:00Z', 
     'readonly' => true, 
     'removeButton' => false, 
     'pluginOptions' => [ 
      'format' => 'yyyy-mm-ddThh:ii:ssZ', 
      'autoclose' => true, 
      'class' => 'form-control', 
     ], 
    ]); 

提交後,它驗證爲空並不會將值傳遞給模型。儘管設置了value屬性,該小部件也不會在文本字段中顯示默認值。在控制器

echo '<label class="control-label">From</label>'; 
    echo DateTimePicker::widget([ 
     'name' => 'ModelName[date_from]', 
     'value' => '2013-01-01T00:00:00Z', 
     'readonly' => true, 
     'removeButton' => false, 
     'pluginOptions' => [ 
      'format' => 'yyyy-mm-ddThh:ii:ssZ', 
      'autoclose' => true, 
      'class' => 'form-control', 
     ], 
    ]); 

與此:

public function actionName() 
    { 
      $model = new ModelName(); 
      if ($model->load(($data = Yii::$app->request->post())) && $model->execquery()) { 
      Yii::$app->session->setFlash('formSubmitted'); 
      $model->from = time('yyyy-mm-ddThh:ii:ssZ', strtotime($data['ModelName']['date_from'])); 
      $model->to = time('yyyy-mm-ddThh:ii:ssZ', strtotime($data['ModelName']['date_to'])); 
      return $this->render('name', ['model' => $model]); 
     } 
     return $this->render('name', ['model' => $model]); 
    } 

模型看起來像這樣的cooresponding值

我可以在視圖中顯示的控件這樣使工作過程:

public $text1; 
public $text2; 
public $date_from; 
public $date_to; 
public $email; 

/** 
* @return array the validation rules. 
*/ 
public function rules() 
{ 
    return [ 
     // positions and dates are required 
     [['text1', 'text2', 'date_to', 'date_from'], 'required'], 
     ['email', 'email'], 
    ]; 
} 

我的表單中的文本輸入字段正常工作。是否還需要添加更多內容到控制器或模型中,以確保窗口小部件值在提交時發佈?

我正在使用Kartik DateTimePicker部件https://github.com/kartik-v/yii2-widget-datetimepicker,但我嘗試過使用其他窗口小部件的相同問題,所以我想我的代碼中缺少一些東西。

回答

0

我經歷的DateTimePicker控件的文檔不見了,我已經看到了模型和活動形式的(沒有默認初始值)使用像

// Usage with model and Active Form (with no default initial value) 
echo $form->field($model, 'date_from')->widget(DateTimePicker::classname(), [ 
    'options' => ['placeholder' => 'Enter event time ...'], 
    'readonly' => true, 
    'removeButton' => false, 
    'pluginOptions' => [ 
     'format' => 'yyyy-mm-ddThh:ii:ssZ',    
     'autoclose' => true,    
    ] 
]); 

來源http://demos.krajee.com/widget-details/datetimepicker

我還沒有看到在那裏使用'value'=>'xxxxxxx'(如果使用了值,那麼在其他例子中也有一個name屬性)。但是文檔中說widget可以包含所有Yii Input Widget的參數。但我的建議是刪除它並嘗試一下。如果你想設置一個默認值,然後從控制器傳遞它。

控制器代碼應該像

public function actionName() 
    { 
     $model = new ModelName(); 
     if ($model->load(Yii::$app->request->post()) && $model->save()) 
     { 
      Yii::$app->session->setFlash('formSubmitted');     
      return $this->render('name', ['model' => $model]); 
     } 
     else 
     { 
      $model->date_from= "2013-01-01T00:00:00Z";//some default value 
      return $this->render('name', ['model' => $model]); 
     } 
    } 

否則你總是要使用的選項

echo '<label class="control-label">From</label>'; 
    echo DateTimePicker::widget([ 
     'name' => 'ModelName[date_from]', 
     'value' => '2013-01-01T00:00:00Z', 
     'readonly' => true, 
     'removeButton' => false, 
     'pluginOptions' => [ 
      'format' => 'yyyy-mm-ddThh:ii:ssZ', 
      'autoclose' => true, 
      'class' => 'form-control', 
     ], 
    ]); 
+0

謝謝,但是還有什麼我需要添加到控制器強制第一將date_from值傳遞給模型的方法?這似乎是自動發生的文本輸入字段,但我的$ model-> date_from保持爲空。 – anchoress

0

我能夠把$模型 - >使用ExecQuery()調用後,以解決這個問題值被設置爲:

public function actionName() 
    { 
      $model = new ModelName(); 
      if ($model->load(($data = Yii::$app->request->post()))) { 
       Yii::$app->session->setFlash('formSubmitted'); 
       $model->from = time('yyyy-mm-ddThh:ii:ssZ', strtotime($data['ModelName']['date_from'])); 
       $model->to = time('yyyy-mm-ddThh:ii:ssZ', strtotime($data['ModelName']['date_to'])); 
       $model->execquery(); 
       return $this->render('name', ['model' => $model]); 
      } 
      return $this->render('name', ['model' => $model]); 
    }