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

时间:2011-03-15 09:23:52

标签: 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);

由于行集中的对象元素名称与表单元素匹配,我想做的是以下内容:

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

非常感谢

4 个答案:

答案 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);
  }