我会根据这里的答案建议一个解决方案https://stackoverflow.com/a/8451723/212940
您的表格:-
class My_Form extends Zend_Form
{
const KIND_1 = 'dineer1';
const KIND_2 = 'dineer2';
const KIND_3 = 'dineer3';
const KIND_4 = 'dineer4';
const KIND_5 = 'dineer5';
const KIND_6 = 'dineer6';
public static $KINDS = array(
1 => self::KIND_1,
2 => self::KIND_2,
3 => self::KIND_3,
4 => self::KIND_4,
5 => self::KIND_5,
6 => self::KIND_6,
);
const DRINK_C = 'c';
const DRINK_M = 'm';
const DRINK_W = 'w';
public static $DRINKS = array(
self::DRINK_C => "cole",
self::DRINK_M => "milk",
self::DRINK_W => "water",
);
const FOOD_B = 'b';
const FOOD_F = 'f';
const FOOD_M = 'm';
const FOOD_P = 'p';
const FOOD_V = 'v';
const FOOD_W = 'w';
public static $FOODS = array(
self::FOOD_B => "burger",
self::FOOD_F => "fruit",
self::FOOD_M => "Meat",
self::FOOD_P => "pizza",
self::FOOD_V => "vegetables",
self::FOOD_W => "Wursterl",
);
public function init()
{
$this->addDecorators(
array(
array('ViewScript', array('viewScript' => 'forms/_form_test.phtml'))
)
); //added as part of answer. Note all default decorators are still available.
$_please_select = array("" => " please select ");
$this->setMethod(Zend_Form::METHOD_POST);
$input_lunch = new Zend_Form_Element_Radio('lunch');
$input_lunch ->setMultiOptions(self::$KINDS) ;
$this->addElement($input_lunch );
foreach (self::$KINDS as $k => $_descriprion) {
$input_drink = new Zend_Form_Element_Select('drink_' . $k);
$input_drink->addMultiOptions(self::$DRINKS);
$input_food = new Zend_Form_Element_Select('food_' . $k);
$input_food->addMultiOptions($_please_select)
->addMultiOptions(self::$FOODS);
$this->addElement($input_drink);
$this->addElement($input_food);
}
$this->setElementDecorators(array('ViewHelper'));//added as part of answer
}
}
正如您所看到的,它只需要两个小更改。
然后你需要创建文件scripts/forms/_form_test.phtml
其中包含:-
<form
id='contact'
action='<?php echo $this->element->getAction(); ?>'
method='<?php echo $this->element->getMethod(); ?>'
>
<table>
<thead>
<tr>
<th></td>
<th>kind</td>
<th>drink</td>
<th>food</td>
</tr>
</thead>
<tbody>
<?php
$elements = $this->element->getElements();
$options = $this->element->lunch->getMultiOptions();
foreach($options as $key => $option){
echo "<tr>\n";
echo "<td>Description row $key</td>\n";
echo "<td><input type='radio' name='lunch' value='$option'</td>\n";
echo "<td>{$elements['drink_' . $key]}</td>\n";
echo "<td>{$elements['food_' . $key]}</td>\n";
echo "</tr>\n";
}
?>
</tbody>
<table>
</form>
文件_form_test.phtml
实际上是渲染表单的装饰器。这是使用 Zend_Form 的一种非常灵活的方式,我通过阅读了解了如何做到这一点这篇文章在这里
默认装饰器(例如“error”)应该仍然可用于此方法。
在我的系统上,我得到了您要求的确切 html 输出。尝试一下看看。