Визуализация представления с ошибками и вводом, который может быть возвращен в AJAX - PullRequest
0 голосов
/ 10 января 2020

У меня есть базовая форма c, которая собирает информацию о пользователе (имя, фамилия и т. Д. c)

Пример одного поля ввода:

<div class="form-group">
    <label for="name">Name</label>
    <input type="text" class="form-control" id="name" name="name" value="{{ old('name', $user->name) }}">
    @if ($errors->has('name'))
        <span class="help-block">
            <strong>{{ $errors->first('name') }}</strong>
        </span>
    @endif
</div>

Я отправляю это данные через AJAX запрос к серверу. Если во время проверки возникают ошибки, я хочу вернуть представление с отображением ошибок. Примерно так:

$html = view('partials.update_form')->withErrors($validator)->withInput()->render();
return response()->json(['html' => $html, 'status' => 'error']);

Однако, это возвращает ошибку 500. Я также пытался убедиться, что данные пользователя добавляются так:

$html = view('partials.update_form', compact('user'))->withErrors($validator)->withInput()->render();
return response()->json(['html' => $html, 'status' => 'error']);

Это также оказалось бесполезным Любой очень хотелось бы получить помощь

Вот моя AJAX просьба просто дать вам полную картину:

var formData = new FormData($('#update-user-form')[0]);
if ($('form').find('input[name=avatar]').val() != '') {
        formData.append('avatar', $('form').find('input[name=avatar]')[0].files[0], $('form').find('input[name=avatar]').val());
    }
    var id = $('form').find('input[name=id]').val();
    $.ajax({
        type: "POST",
        dataType: "json",
        enctype: 'multipart/form-data',
        url: 'admin/edit/'+id,
        data: formData,
        processData: false,
        contentType: false,
        success: function (response) {  
            console.log(response);
            $('.update-form-wrapper').html(response.html);

        }
    });

Вот прилагаемые журналы для тех, кто спросил:

Call to undefined method Illuminate\Support\MessageBag::getBag() (View: /var/www/emailix/resources/views/partials/update_form.blade.php) {"userId":1,"exception":"[object] (Facade\\Ignition\\Exceptions\\ViewException(code: 0): Call to undefined method Illuminate\\Support\\MessageBag::getBag() (View: /var/www/emailix/resources/views/partials/update_form.blade.php) at /var/www/emailix/resources/views/partials/update_form.blade.php:21)
[stacktrace]

Надеюсь, это обеспечит некоторую ясность

Ответы [ 2 ]

0 голосов
/ 10 января 2020

Так что я потратил некоторое время, пытаясь понять все это. Я предполагаю, что директива render() не обрабатывает withError() и withInput(). Я решил передать ошибки проверки представлению под «Псевдонимом», если хотите, чтобы оно обошло пакет сообщений.

$formErrors =  $validator->errors();
$html = View::make('partials.update_form', compact(['user', 'formErrors']))->render();
return response()->jsons(['html' => $html]);

Это решило проблему, но мне пришлось справиться с блейдом. немного по сравнению с сокращенными методами, которые доступны, если вы используете стандартную переменную $ error. Вот пример того, как мой клинок выглядит сейчас:

<div class="form-group">
    <label for="name">Name</label>
    <input type="text" class="form-control {{ (isset($formErrors) && $formErrors->has('name')) ? 'is-invalid' : ''}}" id="name" name="name" value="{{ old('name', $user->name) }}">
    @if (isset($formErrors) && $formErrors->has('name'))
        <span class="invalid-feedback" role="alert">
            <strong>{{ $formErrors->first('name') }}</strong>
        </span>
    @endif
</div>

Наверное, я уже ответил на свой вопрос, но я все еще открыт для предложений для других обходных путей

0 голосов
/ 10 января 2020

Лучший способ решить эту проблему «X-CSRF-TOKEN» - это добавить следующий код в основной макет и продолжить обычные вызовы ajax:

в заголовке

<meta name="csrf-token" content="{{ csrf_token() }}" />

и добавьте javascript код

<script type="text/javascript">
$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});
</script>

Referrer : { ссылка }

Также : пожалуйста, поделитесь журналом ошибок, если у вас есть другие проблемы.

...