我有一个包含多个属性的复选框循环。一个内容可能具有许多属性,因此用户可以检查多个属性。
如果此表单中出现某些验证错误,我需要预先获取已检查的属性。
@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
我上面试过但没有运气......有什么想法吗?
答案 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。随意改变这一点。