3

对于更新个人资料页面

我将路线用作

Route::get('editdriver/{data}', 'DriverController@EditDriver');

在我使用验证后的控制器中,

return Redirect::to('editdriver/'.$data)->withInput()->withErrors($validation->messages());

所以,网址将是

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')) }}
4

2 回答 2

9

我不知道你为什么要使用 jQuery 来填写表单——这没有任何意义,你应该删除该代码。

您只需要这一行代码:

{{ Form::text('Firstname', Input::old('Firstname', $DriverDetails[0]['Firstname']), array('id'=> 'Firstname')) }}

UsingInput::old($DriverDetails[0]['Firstname'])将使用您的数据库值预填充初始表单 - 但如果出现验证错误,则会使用任何“输入”值填充表单

并确认 - 您的原始退货声明看起来正确:

return Redirect::to('editdriver/'.$data)->withInput()->withErrors($validation->messages());
于 2015-02-03T10:56:10.433 回答
4

我想你想使用 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 function showEdit($ID)
{
    //Return View With User Information
    return View::make('management.edit')
        ->with('User', Management::find($ID));
}

这将传回您要编辑的用户的信息。Form::model 将自动将其与您的 Form::text 的名称匹配。我认为您的数据库字段应该与 Form::text 的名称匹配。

然后,当您将编辑发布到服务器时,您可以执行以下操作:

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 以返回用户输入的信息。然后 Form::model 将查看 Session Flash Data 并将旧输入放在正确的位置。请注意,会话闪存数据将优先于模型值 ($User)。

Laravel 表单模型绑定: http ://laravel.com/docs/4.2/html#form-model-binding

希望这可以帮助!

于 2015-02-03T11:08:22.047 回答