【问题标题】:Laravel: ErrorException in helpers.php line 531:Laravel:helpers.php 第 531 行中的 ErrorException:
【发布时间】:2018-06-28 00:28:14
【问题描述】:

请帮我解决这个奇怪的问题。我有一页,其中一个部分是一个带有三个字段和提交按钮的 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() !!},但是为什么呢?

【问题讨论】:

  • 请在循环内显示{{ dd($stage) }}的内容。
  • 您为 Form::text 字段之一提供了一个数组。
  • 向我们展示 {{ dd($stage) }}
  • 我认为问题不在于 $stage。如果我用一些字符串替换 $stage->name 等所有字段,提交后它会给我同样的错误
  • @VinceCarter 尝试对每个字段进行一一评论,看看何时没有显示错误。

标签: php forms laravel


【解决方案1】:

问题在于您的命名方法。您给所有输入相同的名称但没有键。这样,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->index 变量。 $loop->index 是当前循环迭代的索引。所以你可以使用{!! Form::text('name[$loop-&gt;index]', $stage-&gt;name, ['class' =&gt; 'form-control']) !!}

【讨论】:

  • 非常感谢。现在它可以工作了,但仍然很奇怪为什么只提交表单它不起作用?
  • 你不需要使用$i++,你可以使用$loop变量来代替。 laravel.com/docs/5.5/blade#the-loop-variable
  • @VinceCarter 随时!因为每个输入都必须有一个唯一的名称。这种方式在控制器请求中知道它有多少输入,并且每个唯一输入都有一个值。
  • 不是因为这个。这是因为model() 方法重新填充了提交的数据。但仍然是一个很好的答案。 @VinceCarter,如果对您有帮助,您应该投票赞成。
  • @AlexeyMezenin tnx 感谢您的支持!
猜你喜欢
  • 2017-10-23
  • 1970-01-01
  • 1970-01-01
  • 2018-06-10
  • 2017-09-24
  • 2015-07-05
  • 2016-04-30
  • 2017-02-11
  • 1970-01-01
相关资源
最近更新 更多