diff --git a/src/BladeRouteGenerator.php b/src/BladeRouteGenerator.php index bf07a1a1..5e35020c 100644 --- a/src/BladeRouteGenerator.php +++ b/src/BladeRouteGenerator.php @@ -8,11 +8,11 @@ class BladeRouteGenerator public function generate($group = false, $nonce = false) { - $payload = (new Ziggy($group))->toJson(); + $payload = new Ziggy($group); $nonce = $nonce ? ' nonce="' . $nonce . '"' : ''; if (static::$generated) { - return $this->generateMergeJavascript($payload, $nonce); + return $this->generateMergeJavascript(json_encode($payload->toArray()['namedRoutes']), $nonce); } $routeFunction = $this->getRouteFunction(); @@ -21,7 +21,7 @@ public function generate($group = false, $nonce = false) return << - var Ziggy = {$payload}; + var Ziggy = {$payload->toJson()}; $routeFunction diff --git a/tests/Unit/BladeRouteGeneratorTest.php b/tests/Unit/BladeRouteGeneratorTest.php index c5453ae1..903ab94b 100644 --- a/tests/Unit/BladeRouteGeneratorTest.php +++ b/tests/Unit/BladeRouteGeneratorTest.php @@ -27,6 +27,7 @@ public function can_generate_named_routes() $router->post('posts', $this->noop())->name('posts.store'); $router->getRoutes()->refreshNameLookups(); + BladeRouteGenerator::$generated = false; $output = (new BladeRouteGenerator)->generate(); $ziggy = json_decode(Str::after(Str::before($output, ";\n\n"), ' = '), true); @@ -37,6 +38,26 @@ public function can_generate_named_routes() $this->assertArrayHasKey('postComments.index', $ziggy['namedRoutes']); } + /** @test */ + public function can_generate_mergeable_json_payload_on_repeated_compiles() + { + $router = app('router'); + $router->get('posts', $this->noop())->name('posts.index'); + $router->getRoutes()->refreshNameLookups(); + + BladeRouteGenerator::$generated = false; + (new BladeRouteGenerator)->generate(); + $script = (new BladeRouteGenerator)->generate(); + + $payload = json_decode(Str::after(Str::before($script, ";\n\n"), 'routes = '), true); + $this->assertSame([ + 'posts.index' => [ + 'uri' => 'posts', + 'methods' => ['GET', 'HEAD'], + ], + ], json_decode(Str::after(Str::before($script, ";\n\n"), 'routes = '), true)); + } + /** @test */ public function can_generate_routes_for_default_domain() {