Skip to content

Commit

Permalink
Fix "merge" Javascript output of Blade directive (#343)
Browse files Browse the repository at this point in the history
* Add failing test

* Update payload generation to fix merge output
  • Loading branch information
bakerkretzmar authored Oct 23, 2020
1 parent ec74b52 commit 515e4a2
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 3 deletions.
6 changes: 3 additions & 3 deletions src/BladeRouteGenerator.php
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand All @@ -21,7 +21,7 @@ public function generate($group = false, $nonce = false)

return <<<HTML
<script type="text/javascript"{$nonce}>
var Ziggy = {$payload};
var Ziggy = {$payload->toJson()};
$routeFunction
</script>
Expand Down
21 changes: 21 additions & 0 deletions tests/Unit/BladeRouteGeneratorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand All @@ -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()
{
Expand Down

0 comments on commit 515e4a2

Please sign in to comment.