我无法正确加载动态表单。我有一个表单,用户可以单击一个按钮并将输入字段添加到他们的心内容中。我已经能够对信息进行 json_encode 和存储,但是当我尝试编辑表单时,Laravel 仅创建并填写默认输入,而忽略了用户创建的输入字段和数据。如何让 Laravel 的表单模型绑定(bind)显示额外的字段和信息?还是我只是错误地形成了模型绑定(bind)?用户可以按下“Add Another Fence”,然后将表单的另一个副本添加到底部。因此,在这种情况下(我没有包含整个表单,因为它很长),他们可以按下“添加另一个栅栏”按钮,然后会出现另一个类为“gateNumber”的输入和一个新创建的 ID“gateNumber_2”在底部。如果有人知道如何绑定(bind)和显示动态数据或指出我哪里出错了,将不胜感激!非常感谢!
这是我的编辑路线:
/*Edit Orders (GET)*/
Route::get('orders/{orders}/edit', array(
'as' => 'order-edit',
'uses' => 'OrderController@getEdit'
));
/*Edit Order (POST)*/
Route::post('/orders/{orders}/edit', array(
'as' => 'order-edit-post',
'uses' => 'OrderController@postEdit',
));
查看(或者至少是一个片段,表格很长):
@extends('layout.main')
@section('content')
{{ Form::model($order, array('route'=>array('order-edit-post', $order->id), 'name', '=', 'orderForm', 'id', '=', 'orderForm')) }}
<fieldset id="customerInfo">
{{ Form::label('order_name', 'Order Name:')}}
{{ Form::text('order_name') }}
@if($errors->has('order_name'))
{{ $errors->first('order_name') }}
@endif
<legend><strong>Gate Information</strong></legend>
{{ Form::select('gateNumber_1',
array(
'select' => 'Gates Needed',
'0' => '0',
'1' => '1',
'2' => '2',
'3' => '3',
), null,
array('class' => 'gateNumber')) }}
<div>
<input type="button" id="btnAddFence" value="Add Another Fence" />
<input type="button" id="btnDelFence" value="Remove Fence" />
</div>
和订单 Controller :
public function getEdit($id){
$order = Order::where('id', '=', $id);
if($order->count()) {
$order = $order->first();
$order->order_serialized = json_decode($order->order_serialized);
foreach($order->order_serialized as $key => $value){
$order->$key = $value;
}
return View::make('orders.edit')
->with('order', $order);
} else {
return App::abort(404);
}
}
public function postEdit($id){
$validator = Validator::make(Input::all(),
array(
'order_name' =>'required',
'phone' =>'required|min:10|numeric',
'email' =>'required',
'st_address' =>'required',
'post_date' =>'required',
)
);
if($validator->fails()){
return Redirect::route('order-edit', $id)
->withErrors($validator)
->withInput()
->with('global', 'You done messed up.');
} else {
/*Edit Order*/
$order = Order::find($id);
$order->order_name = Input::get('order_name');
$order->phone = Input::get('phone');
$order->email = Input::get('email');
$order->st_address = Input::get('st_address');
$order->post_date = Input::get('post_date');
$order->order_serialized = json_encode(Input::except('_token', 'submit'));
if($order->save()){
return Redirect::route('home')
->with('global', 'Your order has been edited.');
}
}
return Redirect::route('home')
->with('global', 'Your order could not be edited.');
}
最佳答案
Laravel 在您使用时将数据绑定(bind)到您的表单:
{{ Form::model($order, ...) }}
和
{{ Form::text('order_name') }}
但是在您的 javascript 中,您并没有使用后者来创建那些新字段。
无论如何,这是您无法通过 Javascript 执行的操作,您必须在 PHP (Laravel) 中执行它。但是您可以通过 ajax 从您的数据库中收集这些信息。
关于php - Laravel 4 表单模型绑定(bind)与动态表单未正确填写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22564051/