Laravel Blade-View: работа с API Repsonse

Допустим, у меня есть простая форма просмотра лезвия только с одним полем ввода и кнопкой отправки. В этом поле вам просто нужно написать имя. После этого вам нужно нажать кнопку отправки, которая делает вызов 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>

На моей странице отображается ответ. Я хочу оставаться в реальном представлении и показывать ответ в виде предупреждения, например. $ имя . 'был создан'

Маршрут API (routes/api.php):

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

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

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

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

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

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

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
6 745
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

What I want is to stay at the actual view and show the response as a alert

Суть этого не в том, что 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 в своем контроллере и отправить обратно только имя в операторе return метода контроллера.

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

Другие вопросы по теме