セッションを使用して、Zend アプリケーションの複数選択ボックスにオプションを設定しています。
ユーザーは 1 つ以上のオプションを選択し、フォームの他のフィールドに入力して送信します。ユーザーが複数選択ですべてのオプションを選択しなかった場合、フォームは再び表示されますが、複数選択には、ユーザーが最後に選択しなかったオプションしかありません。このプロセスは、複数選択から処理するオプションがなくなるまで続きます。
複数選択ボックスの入力に使用されないように、既に処理されたオプションを削除するために使用するコードを次に示します。
if($form_successful){
// TODO remove $post['keyword_names'] (i.e. already processed) from $keyword_names (that come from $_SESSION)
$keyword_names = array_diff($keyword_names, $post['keyword_names']);
print_r($keyword_names);
if(is_array($keyword_names) && !empty($keyword_names)){
// save updated $keyword_names into $_SESSION['workflow1']
$session = new Zend_Session_Namespace('workflow1');
$session->keyword_names = $keyword_names;
// set flag to false so that we display form again
$form_successful = false;
}else{ // all keywords have been assigned
// go to next step
$this->_redirect('/workflow-1/step-'.($step+1).'/');
}
}
print_r($keyword_names);
正しいオプションが表示されますが、ユーザーが送信したときにフォームが読み込まれると、最初から存在していたオプションが複数選択に表示されます。つまり、ユーザーが選択して送信したばかりのオプションは、複数選択から取り出されません。ユーザーがフォームを再度送信したときにのみ、複数選択ボックスが更新されます。
助けに感謝します。