如何将输入文本区域放入数组中? (Laravel 5.3)
How to put input textarea in an array? (Laravel 5.3)
我的看法blade是这样的:
@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'
];
}
}
当只有一个数据时,我输入评论并提交,有效
但是,当数据超过一个时,就不行了
存在这样的错误:
An invalid form control with name='review' is not focusable.
我该如何解决?
VIEW
{!! 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
}
您在这里犯了一些错误...在 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>
编辑
我刚刚创建了这个 Whosebug topic。您可以尝试在 <form>
中添加 novalidate
属性吗?
<form name="myform" novalidate>
你的情况是这样的:
{!! Form::open(['route' => 'message.review.update', 'method' => 'post', 'id' => 'reviewform', 'novalidate']) !!}
我的看法blade是这样的:
@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'
];
}
}
当只有一个数据时,我输入评论并提交,有效
但是,当数据超过一个时,就不行了
存在这样的错误:
An invalid form control with name='review' is not focusable.
我该如何解决?
VIEW
{!! 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
}
您在这里犯了一些错误...在 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>
编辑
我刚刚创建了这个 Whosebug topic。您可以尝试在 <form>
中添加 novalidate
属性吗?
<form name="myform" novalidate>
你的情况是这样的:
{!! Form::open(['route' => 'message.review.update', 'method' => 'post', 'id' => 'reviewform', 'novalidate']) !!}