Laravel Вернуться на страницу со старыми данными для проверки

Для страницы обновления профиля

Я использую маршрут как

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

person Biz Dev B    schedule 03.02.2015    source источник
comment
Только со старым вводом, а не данными из бд   -  person Biz Dev B    schedule 03.02.2015
comment
Вам нужно опубликовать код формы   -  person Laurence    schedule 03.02.2015
comment
Я обновил вопрос,,,   -  person Biz Dev B    schedule 03.02.2015


Ответы (2)


Я понятия не имею, почему вы используете jQuery для заполнения своей формы - это не имеет смысла, и вы должны удалить этот код.

Все, что вам нужно, это одна строка кода:

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

Использование Input::old($DriverDetails[0]['Firstname']) предварительно заполнит исходную форму значением вашей базы данных, но затем заполнит форму любыми «введенными» значениями, если возникнет ошибка проверки.

И чтобы подтвердить - ваш исходный оператор возврата выглядит правильно:

return Redirect::to('editdriver/'.$data)->withInput()->withErrors($validation->messages());
person Laurence    schedule 03.02.2015
comment
Да, я удалю jquery. И мне следует использовать return Redirect::back()->withErrors($validation->messages()); или с return View::make('home/editdriver')->with('DriverDetails', $DriverDetails);? - person Biz Dev B; 03.02.2015
comment
Ваш исходный return, включая ->withInput(), указанный в вашем вопросе, верен. - person Laurence; 03.02.2015
comment
Я обновил код формы, он по-прежнему показывает значение из БД после отправки формы :( - person Biz Dev B; 03.02.2015
comment
Извините - у меня была ошибка в моем коде - попробуйте новый обновленный код (и вы все равно ДОЛЖНЫ удалить код jQuery, иначе он перезапишет ответ) - person Laurence; 03.02.2015
comment
как насчет Redirect::back()-›withInput()-›withErrors($validation-›messages()); таким образом, вам не нужно ничего заполнять вручную в вашем представлении, так как laravel сделает это за вас. - person nozzleman; 03.02.2015
comment
Да - это еще один вариант. Однако иногда вы не всегда хотите перенаправить обратно, а на другую страницу. Так что любой вариант работает. - person Laurence; 03.02.2015

Я думаю, вы хотите использовать метод Form::model Laravel. Это позволяет вам легко заполнять форму данными из вашей базы данных, а также дает вам возможность вводить старые данные формы.

{{ 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 просматривает Flash-данные сеанса и помещает старые входные данные в нужные места. Обратите внимание, что данные Session Flash имеют приоритет над значением моделей ($User).

Привязка модели формы Laravel: http://laravel.com/docs/4.2/html#form-model-binding

Надеюсь это поможет!

person Jirennor    schedule 03.02.2015