Laravel 5.7 如何在 Blade 模板中获取原始输入?

How to Get Original Input in Blade Template in Laravel 5.7?

可以通过{{ old('my_field') }}检索字段的原始值。但就我而言,这还不够。我正在使用动态添加的字段。意思是,我不能确定字段 my_collection.5.my_field 是否存在。要获取错误消息和错误格式,我需要遍历所有动态添加的 fieldsets:

@if (request()->input('collection'))
    @foreach(request()->input('collection') as $key => $item)
    <label class="label" for="collection.{{ $key }}.my_field">my field</label>
    <textarea
        type="text"
        id="collection.{{ $key }}.my_field"
        name="collection[{{ $key }}][my_field]"
        class="textarea {{ $errors->has('collection.' . $key . '.my_field') ? 'is-danger' : '' }}">
        {{ old('collection.' . $key . '.my_field') }}
    </textarea>
    @endforeach
@endif

但是request()->input('my_collection')Input::get('my_collection')returnnull。它也不适用于简单字段(Input::get('my_simple_field')Input::get('my_simple_field'))。

如何访问 Blade 模板中的输入字段?

解决方案(在这种情况下就足够了)是 old(...) helper。它提供对输入的所有级别的访问 (除了 "root",表示输入集本身)。所以题中的功能可以实现如下:

@if (old('actions'))
    @foreach(old('actions') as $key => $action)
        ...
    @endforeach
@endif

不过,如果知道为什么 request()->input('my_collection')Input::get('my_collection') 不起作用,以及如何访问输入集本身(例如,为了迭代它),那就太好了。


更新

可以使用 old() 不带参数访问完整的输入集。