任何可以帮助我解决这个问题的cakePHP大师。我试图在循环中生成此标记块。我的想法是,我不必手动编写每个字段,同时保持项目蛋糕的方向。
这是我想要的Html(基本上):
<fieldset>
<div>
<label><span></span></label>
<div>
<div>
<label><input type="radio"></label>
</div>
<div>
<label><input type="radio"></label>
</div>
</div>
</div>
</fieldset>
简单吧? (错误的)
我正在尝试使用Form helper,如此
foreach($my_questions as $key => $quest){
$attributes = array(
'between' => "<label><span>{$quest}<span><label>",
'separator' => '</div><div class="radio inline">',
'format' => array('after', 'input', 'between', 'label', 'before', 'error' )
);
echo '<fieldset>';
echo $this->Form->radio($key, $options,$attributes);
echo '</fieldset>';
}
我确信我错过了一些东西,或者我很简单就能做到这一点。任何帮助表示赞赏。越快越好。非常感谢
答案 0 :(得分:1)
您应该使用element作为字段集。因此,创建一个像app/View/Elements/radio_fieldset.ctp
这样的文件,将字段集HTML添加到其中,在其中放置一个foreach以循环插入要插入的数组,例如:
<fieldset>
<div>
<label><span><?php echo $question; ?></span></label>
<div>
<?php foreach ($options as $optionId => $option): ?>
<div class="radio inline">
<label>
<?php echo $this->Form->input($optionId, array(
'value' => $option,
'type' => 'radio'
)); ?>
</label>
</div>
<?php endforeach; ?>
</div>
</div>
</fieldset>
确保在Controller中设置所有问题/选项。 然后从您的视图中,将问题和选项推送到元素,如下所示:
echo $this->element('radio_fieldset', compact('questions', 'options'));
上面的代码肯定需要进行一些调整以适应您的具体情况,但它应该让您了解如何在更多的&#34; Cake-ish&#34;方式。
答案 1 :(得分:1)
我最接近的是:
echo '<fieldset><div>';
echo '<label><span>'.$quest.'</span></label>';
echo $this->Form->input($key, array(
'before' => '<div>',
'after' => '</div>',
'between' => '--between---',
'separator' => '</div><div>',
'legend' => false,
'options' => array('Yes', 'No'),
'type' => 'radio'
));
echo '</div></fieldset>';
我不完全确定它是最好的方式,还是更正确的,但它对我有用,几乎可以满足我的需要!诀窍是将图例设置为false以删除创建字段集和图例的自动化,然后能够为分隔符设置开始和结束标记。
这是结果! Gotta Love Cake
<fieldset>
<div>
<label><span>Got any questions?</span></label>
<div class="input radio">
<div>
<input type="hidden" name="data[q_3]" id="q_3_" value="">
<input type="radio" name="data[q_3]" id="Q30" value="0">
<label for="Q30">Yes</label>
</div>
<div>
<input type="radio" name="data[q_3]" id="Q31" value="1">
<label for="Q31">No</label>
</div>
</div>
</div>
</fieldset>