Zend framework 如何使用会话填充zend表单字段?
我正在使用会话在我的Zend应用程序中填充带有选项的多选框 用户选择一个或多个选项并填写表单上的其他字段,然后提交。如果用户没有选择multi-select中的所有选项,则再次显示表单,但multi-select仅包含用户上次未选择的选项。此过程将继续进行,直到“多选”左侧没有更多选项可供处理 下面是我用来去除已经处理过的选项的代码,这样它们就不会被用来填充多选框:Zend framework 如何使用会话填充zend表单字段?,zend-framework,php,zend-session,Zend Framework,Php,Zend Session,我正在使用会话在我的Zend应用程序中填充带有选项的多选框 用户选择一个或多个选项并填写表单上的其他字段,然后提交。如果用户没有选择multi-select中的所有选项,则再次显示表单,但multi-select仅包含用户上次未选择的选项。此过程将继续进行,直到“多选”左侧没有更多选项可供处理 下面是我用来去除已经处理过的选项的代码,这样它们就不会被用来填充多选框: if($form_successful){ // TODO remove $post['keyword_names'] (i.e.
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\u r($keyword\u name)代码>显示正确的选项,但是当用户提交时加载表单时,multi-select会显示从一开始就存在的选项,即用户刚刚选择并提交的选项不会从multi-select中删除,只有当用户再次提交表单时,多选框才会更新
感谢您的帮助。所以您这里没有任何关于Zend_Form对象的代码。如何填充表单元素?如果您发布了扩展Zend_表单的类代码(或使用表单拨打的任何其他代码),那么我可能会提供帮助。但是,在任何情况下,您都可以使用setMultiOptions()方法或addMultiOption()为multiselectbox中的每个项目填充multiselectbox。通过使用URL参数解决了这个问题。下面是代码(可能与我第一次发布的有很大不同,因为做了一些重大更改):
我的表格很长很复杂。代码——我最初用来填充multi-select框——我传入一个关键字名称数组,该数组是从会话中检索的,该会话在表单中循环,以便为multi-select创建选项。但这只是元素初始化的代码。我的意思是,你是如何填充多选择框的?为setMultioption保留键/值对并填充selectbox的代码是什么?
// after successful form submission
if($form_successful){
// remove $post['keyword_names'] (i.e. already processed) from $keyword_names (that come from $_SESSION)
$keyword_names = array_diff($keyword_names, $post['keyword_names']);
// save remaining $keyword_names into $_SESSION['workflow1']
$session = new Zend_Session_Namespace('workflow1');
$session->keyword_names = $keyword_names;
if(is_array($keyword_names) && !empty($keyword_names)){
// redirect to the same step again - to ensure that the form will reflect (in select lists) newly created AdGroup and/or Campaign
// GET parameteres ($params_array) provide a way to remember user's choice
$params_array = array();
if(!empty($post['match_type_id'])){
$params_array['match_type_id'] = $post['match_type_id'];
}
if(!empty($post['with_permutations'])){
$params_array['with_permutations'] = $post['with_permutations'];
}
if(!empty($ad_group_id)){
$params_array['ad_group_id'] = $ad_group_id;
}
$this_step_url = UrlUtils::assemble('', $this->getRequest()->getActionName(), $this->getRequest()->getControllerName(), $this->getRequest()->getModuleName(), $params_array);
$this->_redirect($this_step_url);
}else{ // all keywords have been assigned
// go to next step
$this->_redirect('/workflow-1/step-'.($step+1).'/');
}
}