【问题标题】:CakePHP 2 output checkbox array inside loopCakePHP 2在循环内输出复选框数组
【发布时间】:2018-01-19 20:19:54
【问题描述】:

我读过CakePHP multiple checkbox array HTML the right way,但得到了奇怪的结果。我有一个标签列表(来自一个名为 Tag 的模型)。我想遍历这些并在视图中为它们输出复选框。

所以我在我的控制器中获得了Tag 数据:

$tags = $this->Tag->find('list', ['order' => ['name' => 'ASC']]);
$this->set('tags',$tags);

当我在视图中循环浏览它时,我试图在 Bootstrap 标记之间输出复选框:

<?php echo $this->Form->create('GroupTag'); ?>
<?php foreach ($tags as $tag_id => $tag): ?>
    <div class="checkbox">
        <label>
            <?php echo $this->Form->checkbox('tag_id[]', array( 'value'=> $tag_id)); ?>
            <?php echo $tag; ?>
        </label>
    </div>
<?php endforeach; ?>

我从链接到的帖子中复制了tag_id[] 的语法。

但是当我检查标记时,它会为每个&lt;input type="checkbox"&gt; 生成以下name 属性:

data[GroupTag][tag_id[]]

不应该这样

data[GroupTag][tag_id][]

?

我的想法是我有多个带有name 属性tag_id[] 的复选框,然后在控制器中我可以循环检查已检查的内容。

请有人对此提出建议,因为我无法使其正常工作,并查看了此处/文档中提供的示例。

【问题讨论】:

  • 尝试使用$this-&gt;Form-&gt;checkbox('tag_id.', array( 'value'=&gt; $tag_id))
  • 那行得通。但这是正确的 Cake 做法吗?输出似乎是正确的,因为我认为 data[GroupTag][tag_id][] 适合我正在尝试做的事情 - 遍历多个名为 tag_id[] 的复选框?
  • 是的,这是正确的方法

标签: cakephp cakephp-2.0


【解决方案1】:

试试这个

$this->Form->checkbox('tag_id.', array( 'value'=> $tag_id))

【讨论】:

    【解决方案2】:

    你也可以这样做:

    $this->Form->input('GroupTag.tag_id', [
        'type' => 'select',
        'multiple' => 'checkbox',
        'options' => $tag_id
    ]);
    

    FormHelper::select(string $fieldName, array $options, array $attributes)

    例子:

    $options = array(
        'Value 1' => 'Label 1',
        'Value 2' => 'Label 2'
    );
    
    echo $this->Form->select('Model.field', $options, array(
        'multiple' => 'checkbox'
    ));
    

    输出:

    <div class="input select">
       <label for="ModelField">Field</label>
       <input name="data[Model][field]" value="" id="ModelField"
        type="hidden">
       <div class="checkbox">
          <input name="data[Model][field][]" value="Value 1"
            id="ModelField1" type="checkbox">
          <label for="ModelField1">Label 1</label>
       </div>
       <div class="checkbox">
          <input name="data[Model][field][]" value="Value 2"
            id="ModelField2" type="checkbox">
          <label for="ModelField2">Label 2</label>
       </div>
    </div>
    

    【讨论】:

    • 这在循环中不起作用。如果在循环的每次迭代中输出每个复选框。例如,如果循环执行 10 次并且有 5 个复选框,您将获得 50 个输入(每行相同)。
    • @Andy,无需循环.. 使用一次即可。
    • 重新阅读问题!特别是“输出复选框引导标记之间”的位。每次循环执行时都必须输出标记,因此首先需要循环。
    • 您可以自定义输出模板 - book.cakephp.org/2.0/en/core-libraries/helpers/…。 $options['before']、$options['between']、$options['separator'] 和 $options['after'] 如果您需要在 input() 的输出中注入一些标记,请使用这些键方法。 FormHelper 生成的 HTML 的顺序也是可控的。 “格式”选项支持描述您希望所述元素遵循的模板的字符串数组。支持的数组键有:array('before', 'input', 'between', 'label', 'after','error')。
    猜你喜欢
    • 1970-01-01
    • 2019-05-29
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多