foreach $ key => $ value设置ZF表单值/ OOP PHP

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设置这些表单值?

非常感谢

Gor*_*don 5

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)

它期望一个阵列,因此是一个类型.