Как отправить данные в формате jsonb через форму в laravel?

Пользователь

от aaron_armstrong , в категории: PHP , 2 года назад

Как отправить данные в формате jsonb через форму в laravel?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от landen.nienow , 2 года назад

@aaron_armstrong 

Для отправки данных в формате jsonb через форму в Laravel, вы можете использовать функцию json_encode() для преобразования данных в формат json, а затем отправить их в форме в качестве строки.


Пример:

1
2
3
4
5
<form method="POST" action="/submit">
    @csrf
    <input type="hidden" name="data" value="{{ json_encode($data) }}">
    <button type="submit">Submit</button>
</form>


Здесь мы используем функцию json_encode() для преобразования массива $data в строку формата json, а затем передаем ее в форме в качестве скрытого поля data.


На сервере вы можете получить отправленные данные с помощью метода json_decode() для декодирования строки JSON в объект или массив PHP.


Пример:

1
2
3
4
5
6
7
8
public function submit(Request $request)
{
    $data = json_decode($request->input('data'));

    // Обработка данных

    return redirect('/')->with('success', 'Data submitted successfully');
}


Здесь мы получаем отправленные данные из скрытого поля data и декодируем их в объект или массив PHP с помощью функции json_decode(). Далее мы можем обработать эти данные и вернуть редирект с сообщением об успехе.

Пользователь

от forest , год назад

@aaron_armstrong 

Если вы хотите отправить данные в формате jsonb через форму в Laravel с использованием AJAX, вам нужно будет выполнить следующие шаги:

  1. Создайте форму в вашем представлении (например, в файле resources/views/form.blade.php):
1
2
3
4
5
6
<form id="myForm">
    @csrf
    <input type="text" name="field1">
    <input type="text" name="field2">
    <button type="submit">Submit</button>
</form>


  1. Добавьте обработчик события с помощью JavaScript, чтобы отправить данные формы в формате jsonb при нажатии на кнопку отправки:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<script>
    const form = document.getElementById('myForm');
    
    form.addEventListener('submit', function(event) {
        event.preventDefault();
        
        // Получаем данные формы
        const formData = new FormData(form);
        
        // Преобразуем данные в объект
        const jsonData = {};
        for (const [key, value] of formData.entries()) {
            jsonData[key] = value;
        }
        
        // Отправляем данные на сервер
        fetch('/submit', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').getAttribute('content')
            },
            body: JSON.stringify(jsonData)
        })
        .then(response => response.json())
        .then(data => {
            // Обработка успешного ответа сервера
            console.log(data);
        })
        .catch(error => {
            // Обработка ошибки
            console.error(error);
        });
    });
</script>


  1. Создайте маршрут и метод контроллера в вашем роутере для обработки отправленных данных:
1
Route::post('/submit', 'FormController@submit');


  1. В вашем контроллере (например, app/Http/Controllers/FormController.php) определите метод submit для обработки отправленных данных:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
use IlluminateHttpRequest;

public function submit(Request $request)
{
    $data = $request->json()->all();
    
    // Обработка данных
    
    return response()->json(['success' => true]);
}


В методе submit мы используем $request->json()->all() для получения отправленных данных в виде массива. Далее мы можем обработать эти данные по своему усмотрению и вернуть успешный ответ в виде json по умолчанию.


Таким образом, данные будут отправлены в формате jsonb через AJAX при отправке формы.