Laravel:helpers.php第531行中的ErrorException:

时间:2018-01-18 20:20:11

标签: php forms laravel

请帮我解决这个奇怪的问题。我有一个页面,其中一个部分是一个HTML表单,有三个字段和提交按钮。如果我加载页面,一切都很好。如果我提交表单,它会给我错误:

ErrorException in helpers.php line 531:
htmlentities() expects parameter 1 to be string, array given (View: 
C:\xampp\htdocs\beta\resources\views\admin\table\partials\form.blade.php) 
(View: C:\xampp\htdocs\beta\resources\views\admin\table\partials\form.blade.php)

form.blade.php包含有问题的表单。这是代码:

{!! Form::model($season, [
    'method' => 'post',
    'route' => ['admin.tables.show', $season->id]
]) !!}

@foreach($stages as $stage)
<div class="col-md-12 formleft">
    <div class="col-md-4">
        <div class="form-group">
            {!! Form::label('name') !!}
            {!! Form::text('name[]', $stage->name, ['class' => 'form-control']) !!}
        </div>
    </div>
    <div class="col-md-4">
        <div class="form-group">
            {!! Form::label('url') !!}
            {!! Form::text('url[]', $stage->url, ['class' => 'form-control']) !!}
        </div>
    </div>
    <div class="col-md-4">
        <div class="form-group">
            {!! Form::label('type_id', 'Type') !!}
            {!! Form::select('type_id[]', $types, $stage->type_id, ['class' => 'form-control']) !!}
            {!! Form::hidden('id[]', $stage->id) !!}
        </div>
    </div>
</div>
@endforeach

{!! Form::submit('Save stages', ['class' => 'btn btn-primary']) !!}

{!! Form::close() !!}

<br>

错误在@foreach循环中的某处。我已经逐个删除了表单字段,但每次它都给我相同的错误。仅当我删除所有表单字段时,它才会起作用。如果我将表单字段保留为没有值,则错误会再次出现。我不知道发生了什么。

为了调试代码我改变了@foreach循环,如下所示:

@foreach($stages as $stage)
<div class="col-md-12 formleft">
    <div class="col-md-4">
        <div class="form-group">
            {!! Form::label('name') !!}
            {!! Form::text('name[]', null, ['class' => 'form-control']) !!}
        </div>
    </div>
</div>
@endforeach

但错误又来了。问题出在{!! Form()!!},但为什么?

1 个答案:

答案 0 :(得分:2)

问题在于您的命名方法。你给所有输入相同的名字,但没有键。通过这种方式,laravel认为它是一个阵列。所以在foreach之前放一个计数器,给每个名字一个键,括号内的数字。像下面这段代码:

@php
    $i = 0;
@endphp
    @foreach($stages as $stage)
    <div class="col-md-12 formleft">
        <div class="col-md-4">
            <div class="form-group">
                {!! Form::label('name') !!}
                {!! Form::text('name[$i]', $stage->name, ['class' => 'form-control']) !!}
            </div>
        </div>
        <div class="col-md-4">
            <div class="form-group">
                {!! Form::label('url') !!}
                {!! Form::text('url[$i]', $stage->url, ['class' => 'form-control']) !!}
            </div>
        </div>
        <div class="col-md-4">
            <div class="form-group">
                {!! Form::label('type_id', 'Type') !!}
                {!! Form::select('type_id[$i]', $types, $stage->type_id, ['class' => 'form-control']) !!}
                {!! Form::hidden('id[$i]', $stage->id) !!}
            </div>
        </div>
    </div>
   @php
    $i++
   @endphp
    @endforeach

    {!! Form::submit('Save stages', ['class' => 'btn btn-primary']) !!}

    {!! Form::close() !!}

    <br>

或者您可以使用$ loop-&gt;索引变量。 $ loop-&gt;索引是当前循环迭代的索引。所以你可以使用{!! Form::text('name[$loop->index]', $stage->name, ['class' => 'form-control']) !!}