我目前在ZF应用程序中有以下代码,用于根据从Db-Table检索的行集来设置Form的值。
$form->forename->setValue($footerContactDetails->forename);
$form->surname->setValue($footerContactDetails->surname);
$form->telephone->setValue($footerContactDetails->telephone);
$form->mobile->setValue($footerContactDetails->mobile);
$form->fax->setValue($footerContactDetails->fax);
$form->email->setValue($footerContactDetails->emailAddress);
$form->address1->setValue($footerContactDetails->address1);
$form->address2->setValue($footerContactDetails->address2);
$form->address3->setValue($footerContactDetails->address3);
$form->townCity->setValue($footerContactDetails->townCity);
$form->region->setValue($footerContactDetails->region);
由于行集中的对象元素名称与表单元素匹配,我想做的是以下内容:
foreach ($footerContactDetails as $key=>$value) {
$form->$key->setValue($value);
}
但是,这会提供以下错误消息:
Fatal error: Call to a member function setValue() on a non-object
我希望这个问题与OOP PHP有关,而不仅仅是ZF。
那么如何使用foreach设置这些表单值?
非常感谢
答案 0 :(得分:5)
foreach
很好,但名字不匹配:
$form->email->setValue($footerContactDetails->emailAddress);
因此,当迭代$footerContactDetails
时,您的代码最终会尝试
$form->emailAddress->setValue()
但由于Zend_Form中没有该名称的元素(它被称为电子邮件),您将收到错误。所以相应地改变它会起作用。
在旁注中,Zend_Form
有一种批量设置方法:
$form->populate((array) $footerContactDetails);
它需要一个数组,因此是类型转换。
答案 1 :(得分:2)
试试这个:
foreach($footerContactDetails as $key=>$value){
$form->{$key}->setValue($value);
}
答案 2 :(得分:1)
Foreach over object variables获取所有变量。这也意味着原始类型。由于原始类型不是对象,因此不能在其上调用方法。
我建议您在调用方法之前使用is_object()
来检查变量是否为对象,或者甚至可能考虑使用不同的方法。
答案 3 :(得分:-2)
你尝试过这样的事吗?
foreach ($footerContactDetails as $key=>$value) {
$form->${$key}->setValue($value);
}