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






Я думаю, что вам не хватает нескольких элементов, или, возможно, вы хотите немного больше изучить, как различные части собираются вместе. Ваш основной запрос не относится к предмету 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); или что-то подобное.