kae*_*ese 0 php oop zend-framework
我目前在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);
Run Code Online (Sandbox Code Playgroud)
由于行集中的对象元素名称与表单元素匹配,我想要做的是以下内容:
foreach ($footerContactDetails as $key=>$value) {
$form->$key->setValue($value);
}
Run Code Online (Sandbox Code Playgroud)
但是,这会提供以下错误消息:
Fatal error: Call to a member function setValue() on a non-object
Run Code Online (Sandbox Code Playgroud)
我希望这个问题与OOP PHP有关,而不仅仅是ZF.
那么如何使用foreach设置这些表单值?
非常感谢
这foreach很好,但名字不匹配:
$form->email->setValue($footerContactDetails->emailAddress);
Run Code Online (Sandbox Code Playgroud)
因此,在迭代时$footerContactDetails,您的代码最终会尝试
$form->emailAddress->setValue()
Run Code Online (Sandbox Code Playgroud)
但由于Zend_Form中没有该名称的元素(它被称为电子邮件),您将收到错误.因此,相应地改变它,它会工作.
在旁注中,Zend_Form有一种批量设置方法:
$form->populate((array) $footerContactDetails);
Run Code Online (Sandbox Code Playgroud)
它期望一个阵列,因此是一个类型.