У меня есть флажок на создание и обновление просмотров:
<?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,
]);
}
}
Как отобразить эти флажки на странице обновлений?
После некоторых экспериментов я думаю, что вам просто нужно изменить имя атрибута в 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);
Так как может быть, что флажок не установлен. Затем пустая строка будет отправлена на сервер.
Других решений пока нет …