【问题标题】:How to put input textarea in an array? (Laravel 5.3)如何将输入文本区域放入数组中? (Laravel 5.3)
【发布时间】:2017-03-23 10:32:19
【问题描述】:

我的视图刀片是这样的:

@foreach($reviews as $key => $review)
    ...
    <div class="form-group">
        {!! Form::open(['route' => 'message.review.update', 'method' => 'post', 'id' => 'reviewform']) !!}
            <label for="review" class="sr-only">Review</label>
            {!! Form::textarea('review', null, ['class' => 'form-control', 'id' => 'review', 'rows'=>3,'required'=>'required']) !!}
            @if ($errors->has('review'))
                <span class="help-block">
                    <strong>{{ $errors->first('review') }}</strong>
                </span>
            @endif
            {!! Form::hidden('id', $review->_id) !!}
            {!! Form::hidden('store', $review->store_id) !!}
        {!! Form::close() !!}
    </div>
    ...
@endforeach

我的路线是这样的:

Route::group(['prefix' => 'message','as'=>'message.'],function(){
    Route::post('review/update', ['as'=>'review.update','uses'=>'ReviewController@update']);
});

我要更新的控制器是这样的:

public function update(CreateReviewRequest $request)
{       
    $param = $request->only('id', 'review', 'store');
    ...
}

更新前会调用CreateReviewRequest进行验证

我的 CreateReviewRequest 是这样的:

<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class CreateReviewRequest extends FormRequest
{
    public function authorize()
    {
        return true;
    }
    public function rules()
    {
        return [
            'review'=>'required|max:300'
        ];
    }
}

当我只有一个数据,我输入评论并提交时,它可以工作

但是,当有多个数据时,它就不起作用了

存在这样的错误:

name='review' 的无效表单控件不可聚焦。

我该如何解决?

【问题讨论】:

  • 您是否尝试使用数组作为 textarea 的名称? name='review[$key]'
  • @JoDev,如果我运行这个:dd($request-&gt;input('review'));,结果如下:array:1 [▼ "$key" =&gt; "test" ]

标签: php laravel routes request laravel-5.3


【解决方案1】:

您在这里犯了一些错误...在 HTML 中,ID 必须是唯一的。您不能将“review”作为所有文本区域的 id ...我的评论即将使用数组作为名称,如 name=review[],并在 ID 中动态添加 $key 在 id 的末尾让它们独一无二。

这会给你这样的东西:

<textarea name="review[]" class="form-control" id="review0" rows="3" required></textarea>
<textarea name="review[]" class="form-control" id="review1" rows="3" required></textarea>
<textarea name="review[]" class="form-control" id="review2" rows="3" required></textarea>

编辑

我刚刚创建了这个stackoverflow topic。能否尝试在&lt;form&gt; 中添加novalidate 属性?

<form name="myform" novalidate>

在你的情况下是这样的:

{!! Form::open(['route' => 'message.review.update', 'method' => 'post', 'id' => 'reviewform', 'novalidate']) !!}

【讨论】:

    【解决方案2】:

    查看

     {!! Form::textarea('review[]', null, ['class' => 'form-control', 'id' => 'review', 'rows'=>3,'required'=>'required']) !!}
    

    <textarea name="review[]" class="form-control" id="review" rows="3" required></textarea>
    

    您必须插入名称字段,如数组为空,当您提交表单时,您可以在控制器调用中获取所有值:

    控制器

    public function update(Request $request)
    {       
        // Validate the form
        $this->validate($request, [
            'review' => 'required',
        ]);
        // get inputs
        $review_input = $request->get('review');
        dd($review_input); // see if it work
    }
    

    【讨论】:

    • 如果我有 3 个数据。第一个数据有效。但是第二个和第三个数据不起作用。存在这样的错误:An invalid form control with name='review[]' is not focusable.
    • 尝试删除验证,像这样: public function update(Request $request){ 。 . .然后做一个测试。
    • 我更新了我的答案,可能验证中的错误是“max:300”,该字段是数组而不是单个数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多