如何解决PHP Foreach在内部创建一个新对象
| 我对如何修改以下代码(生成一个表格以使ѭ0generates自动生成一组新字段并根据可用的日期填充价格)感到有些困惑。 我不确定这是否可能。尽管我在注释中添加了foreach,以解释我认为它应该如何工作,但我认为我只是混用了PHP。 我现在有这段代码: 编辑:最终固定代码:public function RegistrationForm() {
$date_id = (int) $this->getRequest()->requestvar(\'DateID\');
if(!$date = DataObject::get_by_id(\"ShowDateTime\",$date_id)) {
return $this->httpError(404);
}
$date_map = array();
if($Show = $date->Show()) {
if($all_dates = $Show->DateTimes()) {
$date_map = $all_dates->toDropdownMap(\'Price\',\'DateLabel\');
}
}
$fields = new Fieldset (
new TextField(\'Event\',_t(\'Show.Event\',\'Name of Event\'),$Show->Title),new EmailField(\'Name\',_t(\'Show.Name\',\'Name\')),new EmailField(\'Email\',_t(\'Show.Email\',\'Email\')),new TextField(\'Address\',_t(\'Show.Address\',\'Address\')),new TextField(\'Telephone\',_t(\'Show.Telephone\',\'Telephone\')),new DropdownField(\'DateID\',_t(\'Show.CHOOSEDATE\',\'Choose a show\'),$date_map,$date_id)
);
// Loop through the time/events creating a fieldset for: class,horse,number,price
$i =0;
foreach($all_dates as $show_price){
$fields->push(new TextField(\'Class_\'.$i,\'Class\'));
$fields->push(new TextField(\'Horse_\'.$i,\'Horse\'));
$fields->push(new TextField(\'Number_\'.$i,\'Number\'));
$fields->push(new CurrencyField(\'Price_\'.$i,\'Price\',$show_price->Price));
$i++;
}
$form = new Form (
$this,\"RegistrationForm\",$fields,new FieldSet (
new FormAction(\'doRegister\',_t(\'Show.REGISTER\',\'Register\'))
),new requiredFields(\'Event\',\'Name\',\'DateID\')
);
return $form;
}
解决方法
在
$form = new Form (
内不能放置循环表达式。您只能在其中放置简单的表达式,例如$variable
或new
。但没有什么需要更高的执行水平。
因此,首先将对象列表生成为它自己的变量(或一个数组),然后将其添加到$form
中。
Form构造函数希望获取包含字段的FieldSet对象。您可以创建一个新对象并将其添加到字段中,然后将该对象传递到构造函数中。考虑以下替代方法:
$controller = $this;
$name = \'RegistrationForm\';
$fields = new FieldSet();
// add fields to $fields,setup $actions ...
$form = new Form($controller,$name,$fields,$actions);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。