我有4个子表单,我希望将其中的2个组合在一起,然后将一些装饰器应用于它们.
这是我到目前为止所拥有的.在每个子表单中,我已经有一些显示组
$this->setSubForms(array(
'sub1' => $sub1,
'sub2' => $sub2,
'sub3' => $sub3,
'sub4' => $sub4
));
Run Code Online (Sandbox Code Playgroud)
我以为我可以做点什么
$set1 = $this->setSubFormDecorators(array(
'sub1' => $sub1,
'sub2' => $sub2
));
$set1->setDecorator(array('something here'));
$set2 = $this->setSubFormDecorators(array(
'sub3' => $sub3,
'sub4' => $sub4
));
$set2->setDecorator(array('something here'));
Run Code Online (Sandbox Code Playgroud)
显然这根本不起作用.
我真的在ZF的文档中找不到任何东西.如果有其他人遇到过这个窘境,我想我会在这里发布.
我想使用视图脚本来呈现我的zend表单,因为它似乎是在使用Zend_Elements类时控制表单的布局/设计的最佳方法.
从视图脚本中,我使用了渲染元素$this->element->getElement('elementName')
.
我遇到了元素名称的问题.这实际上是表单内部子表单内的子表单.
当我使用FormElements装饰器时,元素的完全限定名称是[subForm] [subForm] [element],这很好.我转移到viewScript装饰器,它改为subForm [subForm] [element].
我知道我需要使用PrepareElements装饰器来解决这个问题,但这导致名称改变形式[subForm] [form] [subForm] [subForm] [elements](它在开头的前两个名字加倍).
任何想法我应该如何处理这个?
谢谢.
更新:我试图调试PrepareElements,我真的不明白在做什么.看起来它在第一次迭代中工作正常,但是当在其中一个中间子表单上运行时,它再次添加形式[subform]前缀.
当我没有使用PrepareElements装饰器时,我只是在名称中缺少"form"前缀(即,而不是形式[subForm] [element],我只得到subForm [element]).
可能我可以解决这个问题吗?
我试图更改belongsTo,但只替换了"subForm"前缀.
实际上,缺少的是subForm上的belongsTo方法.
同样,这完全是因为ViewScript装饰器.它适用于FormElements装饰器.
更新2:为了澄清,我不介意这个名称更改,但是当我调用form-> populate时,它会导致我的字段不填充.
编辑:我认为我已经将问题缩小到了这一点:当我在setDefaults中获取我的值时,它们的排序方式如下:
array(
\"formElements1-name\" => value1... \"subFormName\" => array(
\"parentFormName\" => array(
\"subFormName\" => subForm-values-array
)
)
Run Code Online (Sandbox Code Playgroud)
......这里的主要问题是"parentFormName" => "subFormNAme"..
它重演的是什么?我已经是主要形式了.我猜这是因为我设置了setElementsBelongTo(formName[subFormName])
,但如果我不这样做,那么我会将我的子表单值与表单完全分开,
ie values array = array(\"formName \"=> array(formValues),\"subFormNAme \"=> array(subFormValues)
,虽然我把它贬低了
array(
formName => array(
subFormNAme => values-array
)
)...
Run Code Online (Sandbox Code Playgroud)
是否有可能使这项工作?
我想渲染:
<input type="text" value="" name="foo[]" />
<input type="text" value="" name="bar[]" />
Run Code Online (Sandbox Code Playgroud)
但是Zend_Form_Element需要一个(字符串)名称,所以我需要这样做:
$this->addElement('text', '1', array(
'belongsTo' => 'foo'
));
$this->addElement('text', '2', array(
'belongsTo' => 'bar'
));
Run Code Online (Sandbox Code Playgroud)
但输出是:
<input id="foo-1" type="text" value="" name="foo[1]" />
<input id="bar-2" type="text" value="" name="bar[2]" />
Run Code Online (Sandbox Code Playgroud)
我也可以接受如下输出:
<input id="foo-1" type="text" value="" name="foo[1]" />
<input id="bar-1" type="text" value="" name="bar[1]" />
Run Code Online (Sandbox Code Playgroud)
但Zend_Form_Element重写了同名的元素
有办法做我需要的吗?
我正在整理一个有许多子表格的Zend_Form.事实上,它有可能有这么多的子表单,我希望它们出现在多个页面上.是否可以使用Zend_Paginator创建一些动态页数的多页形式?
这是一个更具体的例子.我正在创建一个页面,有人可以在单个图库中编辑众多照片的元数据.因此,他们点击编辑并从数据库中提取所有图像.页面是主表单,每个图像都放在子表单中.如果我只想要一个页面并且它们都显示出来,那么效果很好.我的工作做得很好.
现在,说有200张图片.显然,您不希望一次加载所有200张图像,因此我希望用户能够一次翻阅20张图像.我真的不在乎是否一次处理一个页面,或者是否存储了值,直到那时像真正的多页表单一样结束然后一次处理.
我已经尝试将图像数据传递给分页器,然后在部分循环中动态添加子表单.这是一个问题,因为在视图的部分循环内部,它无法看到我需要访问的主表单以添加子表单($ this-> form-> addSubform()).
下一个想法是使用数据库查询上的限制手动创建一个分页器,让它以这种方式遍历数据.不理想,但我认为它会起作用.
关于更顺畅的整合的任何想法?谢谢您的帮助!
我有一个包含映射对象的所有字段的表单.其中,我将在Form类中生成一个子表单.我正在尝试通过displaygroup执行此操作,但是当调用控制器中的"子表单"时,标签表单不会生成.我怎么解决?谢谢
这是代码.
<?php
$username = new Zend_Form_Element_Text('user');
...//param for field
$password = new Zend_Form_Element_Password('pwd');
...//param for field
$name = new Zend_Form_Element_Text('name');
...//param for field
$submit = new Zend_Form_Element_Submit('submit');
...//param for field
$this->addElement(array($user,$password,$name,$submit));
$this->addDisplayGroup(array($user,$password,$submit),'login');
$this->addDisplayGroup(array($user,$password,$name, $submit),'create');
?>
Run Code Online (Sandbox Code Playgroud) 大家好!我在这里设置子表单元素,它工作正常.
//Setting SubForm element
$subForm = new Zend_Form_SubForm();
$subForm->setName('sampleSubForm');
$subForm->addElement('text', 'test', array(
'value' => 'someValue',
'name' => 'test',
'belongsTo' => 'sampleSubForm',
'size' => '1',
'maxLength' => '1',
'decorators' => array('ViewHelper'),
));
$this->form->addSubForm($subForm, 'sampleSubForm');
Run Code Online (Sandbox Code Playgroud)
我仍然在摆弄并想知道如何在表单提交时访问子表单元素,以设置其值.干杯和快乐的编码!谢谢
可能的原因是什么
Fatal error: Class 'Zend_Form_Subform' not found
in /path/application/forms/formName.php on line 2
Run Code Online (Sandbox Code Playgroud)
当事情在本地工作正常时在远程服务器上.问题是只有Zend_Form_Subform
和所有其他形式(没有任何子表单)和视图正常工作.
我错过了什么东西下application.ini
的子表格?