Поля с флажками не будут отображаться на странице обновлений

У меня есть флажок на создание и обновление просмотров:

<?php echo $form->field($model3, 'options[]')->checkboxList(['CPF' => 'CPF', 'FWL' => 'FWL', 'SDL' => 'SDL', 'CDAC' => 'CDAC']); ?>

Затем я использовал этот код, чтобы сохранить флажки checkboxlist в виде строк:

$model3->options = implode(',',  $model3->options);

После обновления я использовал этот код, чтобы преобразовать его обратно в массив:

$model3->options = explode(",", $model3->options);

Я ожидаю, что на моей странице обновления должны быть отмечены флажки, основанные на том, что проверено при создании Но флажки флажков остаются не отмеченными.

Вот мой контроллер:

public function actionCreateNewStaff()
{
$session = Yii::$app->session;
if($session['user_type']=='SuperAdmin'){
$model1 = new User();
$model2 = new UserModule();
$model3 = new Employee();if($model1->load(Yii::$app->request->post()) && $model2->load(Yii::$app->request->post()) && $model3->load(Yii::$app->request->post())){
$model1->user_type = 'BizStaff';
$model1->status = 1;
date_default_timezone_set('Asia/Manila');
$model1->date_added = date('Y/m/d', time());
$model1->avatar = UploadedFile::getInstance($model1, 'avatar');
$model1->creator_id = Yii::$app->user->identity->_id;
$model1->parent = $session['store_owner'];
$model1->password = sha1($model1->password);if($model1->save()){
$model2->user_id = $model1->_id;
$model2->save();

$model3->user_id = $model1->_id;
if(isset($model3->options)){
$model3->options = implode(',',  $model3->options);
}
$model3->save();

Yii::$app->session->setFlash('success', "Success!");
}
else{
Yii::$app->session->setFlash('error', "User Registration Failed!");
}return $this->redirect(['managestaff']);

} else {
return $this->renderAjax('createstaff', [
'model1' => $model1,
'model2' => $model2,
'model3' => $model3,
]);
}
}else{
return $this->goHome();
}

}

public function actionUpdateEmployee($id)
{

$session = Yii::$app->session;
$model1 = $this->findModel($id);
$password = $model1->password;
$model2 = UserModule::find()->where( [ 'user_id' => new \MongoId($id) ] )->one();
$model3 = Employee::find()->where( [ 'user_id' => new \MongoId($id) ] )->one();
if(isset($model3->options)){
$model3->options = explode(",", $model3->options);
}
$username = $model1->username;

if($model1->load(Yii::$app->request->post()) && $model2->load(Yii::$app->request->post()) && $model3->load(Yii::$app->request->post())) {

if($model1->password != $password)
$model1->password = sha1($model1->password);
else
$model1->password = $password;

date_default_timezone_set('Asia/Manila');
$model1->date_added = date('Y/m/d', time());$model1->save();
if($model1->save()){
$model2->user_id= $model1->_id;
$count = count($session['modules']);
foreach($session['modules'] as $module){
if(is_int($model2->{$module})){
$model2->{$module} = null; //unchecked
}
else{
$model2->{$module}= '1'; //checked
}
}
$model2->save();
if(isset($model3->options)){
$model3->options = implode(',',  $model3->options);
}
$model3->save();
Yii::$app->session->setFlash('success', "User successfully updated!");
return $this->redirect(['viewemployee', 'id' => (string)$model1->_id]);

}
} else {
return $this->render('updateemployee', [
'model1' => $model1,
'model2' => $model2,
'model3' => $model3,
]);
}
}

Как отобразить эти флажки на странице обновлений?

2

Решение

После некоторых экспериментов я думаю, что вам просто нужно изменить имя атрибута в ActiveField:

//from
<?php echo $form->field($model3, 'options[]')->checkboxList([....]); ?>

//to
<?php echo $form->field($model3, 'options')->checkboxList([....]); ?>

Я надеюсь, что это правильно. То, что вы также должны сделать, это взорваться:

$model3->options = empty($model3->options) ? '' : implode(',', $model3->options);

Так как может быть, что флажок не установлен. Затем пустая строка будет отправлена ​​на сервер.

1

Другие решения

Других решений пока нет …