Skip to content
This repository was archived by the owner on Oct 20, 2025. It is now read-only.

Commit d1d0842

Browse files
committed
Nested form fixes
1 parent 87af27a commit d1d0842

File tree

7 files changed

+64
-16
lines changed

7 files changed

+64
-16
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
namespace App\Http\Controllers;
4+
5+
use Illuminate\Http\Request;
6+
7+
class NestedFormController
8+
{
9+
public function __invoke(Request $request)
10+
{
11+
$request->validate([
12+
'nested.name' => ['required', 'string'],
13+
'nested.accepted' => ['required', 'boolean', 'accepted'],
14+
]);
15+
16+
return redirect()->route('navigation.one');
17+
}
18+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
@extends('layout')
2+
3+
@section('content')
4+
5+
FormNested
6+
7+
<x-splade-form :default="json_encode(['nested' => ['name' => 'Splade']])">
8+
<input v-model="form.nested.name" dusk="name" />
9+
<input type="checkbox" v-model="form.nested.accepted" dusk="accepted" />
10+
<button type="submit">Submit</button>
11+
</x-splade-form>
12+
13+
@endsection

app/routes/web.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use App\Http\Controllers\FormRelationsController;
1111
use App\Http\Controllers\ModalController;
1212
use App\Http\Controllers\NavigationController;
13+
use App\Http\Controllers\NestedFormController;
1314
use App\Http\Controllers\SimpleFormController;
1415
use App\Http\Controllers\SlowFormController;
1516
use App\Http\Controllers\TableController;
@@ -75,6 +76,9 @@
7576
Route::view('form/jsonable', 'form.jsonable')->name('form.jsonable');
7677
Route::view('form/jsonSerializable', 'form.jsonSerializable')->name('form.jsonSerializable');
7778

79+
Route::view('form/nested', 'form.nested')->name('form.nested');
80+
Route::post('form/nested', NestedFormController::class)->name('form.nested.submit');
81+
7882
Route::get('form/components/simple', [FormComponentsController::class, 'simple'])->name('form.components.simple');
7983
Route::get('form/components/libraries', [FormComponentsController::class, 'libraries'])->name('form.components.libraries');
8084
Route::get('form/components/libraryDefaults', [FormComponentsController::class, 'libraryDefaults'])->name('form.components.libraryDefaults');

app/tests/Browser/FormTest.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,20 @@ public function it_can_have_a_default_json_serializable_value()
162162
});
163163
}
164164

165+
/** @test */
166+
public function it_can_nested_values()
167+
{
168+
$this->browse(function (Browser $browser) {
169+
$browser->visit('/form/nested')
170+
->waitForText('FormNested')
171+
->assertInputValue('@name', 'Splade')
172+
->check('@accepted')
173+
->press('Submit')
174+
->waitUntilMissingText('FormNested')
175+
->waitForRoute('navigation.one');
176+
});
177+
}
178+
165179
/** @test */
166180
public function it_can_show_the_forms_state_and_a_progress_bar()
167181
{

dist/protone-media-laravel-splade.js

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2909,11 +2909,10 @@ const Ec = /* @__PURE__ */ ht(Sc, [["render", $c]]), _c = {
29092909
});
29102910
}
29112911
};
2912-
function Gi(e) {
2913-
e = e || {};
2914-
let t = new FormData();
2915-
for (const r in e)
2916-
Object.prototype.hasOwnProperty.call(e, r) && Xi(t, Ki(null, r), e[r]);
2912+
function Gi(e, t, r) {
2913+
e = e || {}, t = t || new FormData(), r = r || null;
2914+
for (const n in e)
2915+
Object.prototype.hasOwnProperty.call(e, n) && Xi(t, Ki(r, n), e[n]);
29172916
return t;
29182917
}
29192918
function Ki(e, t) {
@@ -2936,7 +2935,7 @@ function Xi(e, t, r) {
29362935
return e.append(t, `${r}`);
29372936
if (r == null)
29382937
return e.append(t, "");
2939-
Gi(r);
2938+
Gi(r, e, t);
29402939
}
29412940
var xc = "[object Boolean]";
29422941
function Qi(e) {

dist/protone-media-laravel-splade.umd.cjs

Lines changed: 6 additions & 6 deletions
Large diffs are not rendered by default.

lib/Components/FormHelpers.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
// The methods in this file are completely stolen from Inertia.js:
22
// https://github.com/inertiajs/inertia/tree/master/packages/inertia/src
33

4-
export function objectToFormData(source) {
4+
export function objectToFormData(source, form, parentKey) {
55
source = source || {};
6-
7-
let form = new FormData();
6+
form = form || new FormData();
7+
parentKey = parentKey || null;
88

99
for (const key in source) {
1010
if (Object.prototype.hasOwnProperty.call(source, key)) {
11-
append(form, composeKey(null, key), source[key]);
11+
append(form, composeKey(parentKey, key), source[key]);
1212
}
1313
}
1414

0 commit comments

Comments
 (0)