laravel 4 - 输入旧的阵列复选框

时间:2014-06-23 10:57:31

标签: php validation checkbox laravel laravel-4

我有一个包含多个属性的复选框循环。一个内容可能具有许多属性,因此用户可以检查多个属性。

如果此表单中出现某些验证错误,我需要预先获取已检查的属性。

@foreach($attributes as $entry)



    <div class="check-line">

        <input type="checkbox" id="cat4" class='icheck-me' 
          name="attribute[<?php echo $entry->id; ?>]" 
            data-skin="square" 
            data-color="blue" 
            value="{{$entry->id}}" 
            <?php 
                if(Input::old('attribute['.$entry->id.']')== $entry->id) { 
                    echo 'checked="checked"'; 
                }
            ?>
        />

        <label class='inline' for="cat4">
            <strong>{{$entry->name}}</strong>
        </label>

    </div>
@endforeach

我上面试过但没有运气......有什么想法吗?

2 个答案:

答案 0 :(得分:4)

来自Requests上的Laravel文档:

“使用”数组“输入处理表单时,可以使用点表示法来访问数组:”

$input = Input::get('products.0.name');

所以你也应该能够做到这个fpr Input::old()

<?php 
    if(Input::old('attribute.' . $ii) == $entry->id) { 
        echo 'checked="checked"'; 
    }
?>

答案 1 :(得分:3)

对此更常见的答案是进行数组搜索,而不仅仅是检查当前索引。因此,我看到代码看起来像这样:

@foreach($attributes as $entry)
    <div class="check-line">
        <input type="checkbox" id="cat4_{{{ $entry->id }}}" class="icheck-me"
               name="attribute[]"
               data-skin="square"
               data-color="blue"
               value="{{{ $entry->id }}}"
               @if (in_array($entry->id, Input::old('attribute')))
                   checked
               @endif
            />

        <label class="inline" for="cat4_{{{ $entry->id }}}">
            <strong>{{{ $entry->name }}}</strong>
        </label>
    </div>
@endforeach

首先,我已经使代码更符合Blade:

  • 任何回声现在都是{{{}}},而不是<?php echo ___; ?>{{ / }}之前的混合(我去了{{{而不是{{,因为它不会回应HTML,而且更安全更好)
  • <?php if () {现在是一只刀片@if ()

name属性现在只是一个标准数组(不包括索引,因为它不需要),但id属性以前给所有复选框都相同ID。虽然浏览器会允许您这样做,但它在技术上是非法的HTML,因此我已将条目ID附加到每个复选框。

最后,if条件不再检查具有当前索引的输入值是否与当前条目的ID匹配,而是搜索以查看当前条目的ID是否在任何地方在返回的数组中。这可以防止您的条目以不同的顺序返回到它们在页面上的上一次。

我们现在不依赖于$ ii变量,因此也可以将其删除。


<强>注意事项:

在这样做的过程中,我使代码变得更好,但代码不再相同。如果不确切知道为什么使用$ ii变量来为attribute数组提供密钥,我无法确定使用我的代码可以正常工作。然而,假设它只是帮助这个旧的输入事物,那么它很好。

此外,我将{{更改为{{{可能会产生我不知道的后果。我已经考虑过了$entry->id这样的事情,但是$entry->name中的<label>可能因为某种原因需要转换为非转义HTML。随意改变这一点。