Laravel Blade-View: работа с Api Repsonse - PullRequest
0 голосов
/ 19 января 2019

Допустим, у меня есть простая форма просмотра лезвия только с одним полем ввода и кнопкой отправки. В этом поле вам просто нужно написать имя. После этого вам нужно нажать кнопку отправки, которая делает вызов API.

Для упрощения, скажем, вызов API - это метод: post и URL: 'api / user'

вызывающий API создает нового пользователя в базе данных и отвечает с помощью json:

{
    "id": 1,
    "name": "Im a new user",
    "created_at": 20190119
} 

Как я знаю, если я реализую свой blade.view, как показано ниже:

<form method="POST" action="/api/user">
    @csrf
    <div class="form-group row">
        <label for="username"
               class="col-md-4 col-form-label text-md-right">{{ __('Name') }}</label>

        <div class="col-md-6">
            <input id="username" type="text"
                   class="form-control"
                   name="username" value="{{ old('username') }}" required autofocus>
        </div>
    </div>
    <div class="form-group row mb-0">
        <div class="col-md-8 offset-md-4">
            <button type="submit" class="btn btn-primary">
                {{ __('Create') }}
            </button>
        </div>
    </div>
</form>

Моя страница отображает ответ. То, что я хочу, - это оставаться в реальном виде и отображать ответ в виде предупреждения, например, $ name. 'был создан'

Маршрут Api (маршруты / api.php):

Route::post('/user', 'UserController@createUser');

Конфигурация маршрута (маршруты / web.php):

Route::get('/user' , function () {
return view('user/create-user');
});

Решения, которые я знаю, могли бы работать

  • перенаправление на ту же страницу (это означает, что необходимо повторно выполнить ту же страницу, и это не является действительно ответственным - это решение приводит к загрузке всей страницы снова)

  • возвращает то же представление в методе UserController @ createUser с данными (как и выше, и, насколько я знаю, вызов API должен отвечать с помощью json, а не с представлением)

Также я мог бы использовать Ajax, например, через JQuery. Как видите, есть множество решений, но какие из них самые лучшие.

Можете ли вы сказать, что в этом случае есть лучшие практики?

Есть ли хорошие решения, которые Laravel предлагает из коробки?

1 Ответ

0 голосов
/ 19 января 2019

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

Я хочу остаться в фактическом виде и показать ответ в виде предупреждения

Суть этогоэто не то, что Laravel «выводит из коробки», это на самом деле не вопрос Laravel, а то, как я могу асинхронно обновлять свою страницу.Для этого вам лучше всего использовать ajax-запрос с последующим предупреждением javascript / jQuery.

Я мог бы сделать что-то вроде этого:

$('#submitButton').on('click', function (e) {
        e.preventDefault(); // Want to stay on the page, not go through normal form  
        // Might be easier to make this a NON submit button - then we can use the rest below and not have to js submit()
        // Grab any extra info via data.
        var item_type = $(this).data('item-type');
        var name = $(this).val();
        $.ajax({
            url: "{{url('user/create/')}}",
            type: "POST",
            data: {
                item_type: item_type,
                name: name
            },
            success: function (name) {
                alert(message);
                // Or, if you want a better looking alert, you can use a library like SWAL:
               swal("Success!", "New user created with a name of: "+name, "success");
            },
            error: function () {
                swal("Error", "Unable to bring up the dialog.", "error");
            }
        });
    });

Вам нужно будет обработатьajax-данные в вашем контроллере и отправьте обратно только имя в операторе возврата метода контроллера.

Если вы хотите изменить приведенную выше форму и не делать это с помощью оповещения, используйте jQuery в функции успеха, чтобы сделатьизменения (например, $("#name").text(name); или что-то подобное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...