Laravel 返回带有旧输入的页面以进行验证
Laravel Back to page with old input for validation
更新个人资料页面
我使用的路线是
Route::get('editdriver/{data}', 'DriverController@EditDriver');
在我使用的验证后的控制器中,
return Redirect::to('editdriver/'.$data)->withInput()->withErrors($validation->messages());
因此,url 将是
http://localhost/project/editdriver/1
如果我清空 rule
中所需的值并按提交表单,
它显示带有验证消息的旧数据。
我需要的是,它不应该显示来自数据库的旧值。
我什至试过了.,
return Redirect::back()->withErrors($validation->messages());
我该怎么做??
更新:
在控制器中我有
public function EditDriver($data=NULL)
{
$editvehicle=$data;
$DriverDetails = DriverModel::where('DriverId', $editvehicle)->get()->toArray();
return View::make('home/editdriver')->with('DriverDetails', $DriverDetails);
}
在我看来
$("#Firstname").val("<?php echo $DriverDetails[0]['Firstname']?>");
并将 jquery 到 html 显示为
{{ Form::text('Firstname',null, array('id'=> 'Firstname')) }}
我不知道您为什么要使用 jQuery 来填写您的表单 - 这没有任何意义,您应该删除该代码。
您只需要一行代码:
{{ Form::text('Firstname', Input::old('Firstname', $DriverDetails[0]['Firstname']), array('id'=> 'Firstname')) }}
使用 Input::old($DriverDetails[0]['Firstname'])
将使用您的数据库值预填充初始表单 - 但如果出现验证错误,则会使用任何 'inputted' 值填充表单
并确认 - 你原来的 return 陈述看起来是正确的:
return Redirect::to('editdriver/'.$data)->withInput()->withErrors($validation->messages());
我想你想使用 Laravel 的 Form::model 方法。
这使您可以轻松地使用数据库中的数据填充表单,并且还可以输入旧表单数据。
{{ Form::model($User, array('url' => 'management/edit/' . $User->id, 'role' => 'form')) }}
<div class="form-group">
<label>Username</label>
{{ Form::text('username', Input::old('username'), array('class' => 'form-control', 'placeholder' => 'Username', 'name' => 'username')) }}
</div>
<div class="form-group">
<label>Password</label>
{{ Form::password('password', array('class' => 'form-control', 'placeholder' => 'Password', 'name' => 'password')) }}
</div>
{{ Form::submit('Edit', array('class' => 'btn btn-default')) }}
{{ Form::close() }}
在您的 public 函数中,您可以这样做:
public function showEdit($ID)
{
//Return View With User Information
return View::make('management.edit')
->with('User', Management::find($ID));
}
这将传回您要编辑的用户的信息。
Form::model 会自动将其与您的 Form::text 的名称相匹配。
我认为您的数据库字段应该与 Form::text.
的名称相匹配
然后当您 post 对服务器进行编辑时,您可以这样做:
public function postEdit($ID)
{
// Get Input
$PostData = array(
'username' => Input::get('username'),
'password' => Input::get('password')
);
// Declare Validation Rules.
$ValRules = array(
'username' => 'required|unique:management,username,' . $ID,
'password' => 'required'
);
// Declare Validation Messages
$ValMessages = array(
'username.required' => 'The field Username is required.</br>',
'username.unique' => 'The field Username must be unique.</br>',
'password.required' => 'The field Password is required.</br>'
);
// Validate Input
$ValResult = Validator::make($PostData, $ValRules, $ValMessages);
// Check Validate
if ($ValResult->passes())
{
// Update User
$UserUpdate = Management::find($ID);
$UserUpdate->username = Input::get('username');
$UserUpdate->password = Input::get('password');
$UserUpdate->save();
// Succes, Redirect To User
return Redirect::to('management')
->with('Success', 'The management users is modified.');
}
else
{
// Grab Messages From Validator
$ValErrors = $ValResult->messages();
// Error, Redirect To User Edit
return Redirect::to('management/edit/' . $ID)
->withErrors($ValErrors)
->withInput(Input::except('password'));
}
}
查看->withInput 到return 用户输入的信息。
Form::model 然后将查看会话闪存数据并将旧输入放在正确的位置。
请注意,会话闪存数据将优先于模型值($User)。
Laravel 表单模型绑定:
http://laravel.com/docs/4.2/html#form-model-binding
希望对您有所帮助!
更新个人资料页面
我使用的路线是
Route::get('editdriver/{data}', 'DriverController@EditDriver');
在我使用的验证后的控制器中,
return Redirect::to('editdriver/'.$data)->withInput()->withErrors($validation->messages());
因此,url 将是
http://localhost/project/editdriver/1
如果我清空 rule
中所需的值并按提交表单,
它显示带有验证消息的旧数据。
我需要的是,它不应该显示来自数据库的旧值。
我什至试过了.,
return Redirect::back()->withErrors($validation->messages());
我该怎么做??
更新:
在控制器中我有
public function EditDriver($data=NULL)
{
$editvehicle=$data;
$DriverDetails = DriverModel::where('DriverId', $editvehicle)->get()->toArray();
return View::make('home/editdriver')->with('DriverDetails', $DriverDetails);
}
在我看来
$("#Firstname").val("<?php echo $DriverDetails[0]['Firstname']?>");
并将 jquery 到 html 显示为
{{ Form::text('Firstname',null, array('id'=> 'Firstname')) }}
我不知道您为什么要使用 jQuery 来填写您的表单 - 这没有任何意义,您应该删除该代码。
您只需要一行代码:
{{ Form::text('Firstname', Input::old('Firstname', $DriverDetails[0]['Firstname']), array('id'=> 'Firstname')) }}
使用 Input::old($DriverDetails[0]['Firstname'])
将使用您的数据库值预填充初始表单 - 但如果出现验证错误,则会使用任何 'inputted' 值填充表单
并确认 - 你原来的 return 陈述看起来是正确的:
return Redirect::to('editdriver/'.$data)->withInput()->withErrors($validation->messages());
我想你想使用 Laravel 的 Form::model 方法。 这使您可以轻松地使用数据库中的数据填充表单,并且还可以输入旧表单数据。
{{ Form::model($User, array('url' => 'management/edit/' . $User->id, 'role' => 'form')) }}
<div class="form-group">
<label>Username</label>
{{ Form::text('username', Input::old('username'), array('class' => 'form-control', 'placeholder' => 'Username', 'name' => 'username')) }}
</div>
<div class="form-group">
<label>Password</label>
{{ Form::password('password', array('class' => 'form-control', 'placeholder' => 'Password', 'name' => 'password')) }}
</div>
{{ Form::submit('Edit', array('class' => 'btn btn-default')) }}
{{ Form::close() }}
在您的 public 函数中,您可以这样做:
public function showEdit($ID)
{
//Return View With User Information
return View::make('management.edit')
->with('User', Management::find($ID));
}
这将传回您要编辑的用户的信息。 Form::model 会自动将其与您的 Form::text 的名称相匹配。 我认为您的数据库字段应该与 Form::text.
的名称相匹配然后当您 post 对服务器进行编辑时,您可以这样做:
public function postEdit($ID)
{
// Get Input
$PostData = array(
'username' => Input::get('username'),
'password' => Input::get('password')
);
// Declare Validation Rules.
$ValRules = array(
'username' => 'required|unique:management,username,' . $ID,
'password' => 'required'
);
// Declare Validation Messages
$ValMessages = array(
'username.required' => 'The field Username is required.</br>',
'username.unique' => 'The field Username must be unique.</br>',
'password.required' => 'The field Password is required.</br>'
);
// Validate Input
$ValResult = Validator::make($PostData, $ValRules, $ValMessages);
// Check Validate
if ($ValResult->passes())
{
// Update User
$UserUpdate = Management::find($ID);
$UserUpdate->username = Input::get('username');
$UserUpdate->password = Input::get('password');
$UserUpdate->save();
// Succes, Redirect To User
return Redirect::to('management')
->with('Success', 'The management users is modified.');
}
else
{
// Grab Messages From Validator
$ValErrors = $ValResult->messages();
// Error, Redirect To User Edit
return Redirect::to('management/edit/' . $ID)
->withErrors($ValErrors)
->withInput(Input::except('password'));
}
}
查看->withInput 到return 用户输入的信息。 Form::model 然后将查看会话闪存数据并将旧输入放在正确的位置。 请注意,会话闪存数据将优先于模型值($User)。
Laravel 表单模型绑定: http://laravel.com/docs/4.2/html#form-model-binding
希望对您有所帮助!