Skip to content

Commit a875e19

Browse files
authored
Merge pull request #60 from peterfox/feature/route-macro
Adds a Route Macro
2 parents 181d933 + becf830 commit a875e19

File tree

4 files changed

+85
-0
lines changed

4 files changed

+85
-0
lines changed

src/Controller.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
namespace Inertia;
4+
5+
class Controller
6+
{
7+
public function __invoke($component, $props)
8+
{
9+
return Inertia::render($component, $props);
10+
}
11+
}

src/ServiceProvider.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Inertia;
44

5+
use Illuminate\Routing\Router;
56
use Illuminate\Support\Facades\Blade;
67
use Illuminate\Support\ServiceProvider as BaseServiceProvider;
78

@@ -17,5 +18,11 @@ public function boot()
1718
Blade::directive('inertia', function () {
1819
return '<div id="app" data-page="{{ json_encode($page) }}"></div>';
1920
});
21+
22+
Router::macro('inertia', function ($uri, $component, $props = []) {
23+
return $this->match(['GET', 'HEAD'], $uri, '\Inertia\Controller')
24+
->defaults('component', $component)
25+
->defaults('props', $props);
26+
});
2027
}
2128
}

tests/ControllerTest.php

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
namespace Inertia\Tests;
4+
5+
use Illuminate\Http\Request;
6+
use Inertia\Controller;
7+
8+
class ControllerTest extends TestCase
9+
{
10+
public function test_it_returns_an_inertia_response()
11+
{
12+
$request = new Request();
13+
$request->headers->set('X-Inertia-Partial-Component', 'Component');
14+
$controller = new Controller();
15+
16+
$response = $controller('Component', ['prop1' => true, 'prop2' => false])->toResponse($request);
17+
18+
19+
$this->assertEquals('app', $response->name());
20+
$this->assertEquals([
21+
'page' => [
22+
'component' => 'Component',
23+
'props' => [
24+
'prop1' => true,
25+
'prop2' => false,
26+
],
27+
'url' => '',
28+
'version' => null,
29+
]
30+
], $response->getData());
31+
}
32+
}

tests/RouterTest.php

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?php
2+
3+
namespace Inertia\Tests;
4+
5+
use Illuminate\Routing\RouteCollection;
6+
use Illuminate\Support\Facades\Route;
7+
8+
class RouterTest extends TestCase
9+
{
10+
public function test_configuring_route_via_macro()
11+
{
12+
/** @var \Illuminate\Routing\Route $route */
13+
$route = Route::inertia('/', 'Component', ['prop1' => true, 'prop2' => false]);
14+
15+
/** @var RouteCollection $collection */
16+
$collection = Route::getRoutes();
17+
18+
$this->assertNotEmpty($collection->getRoutes());
19+
$this->assertEquals($route, $collection->getRoutes()[0]);
20+
21+
$this->assertEquals(['GET', 'HEAD'], $route->methods);
22+
23+
$this->assertEquals('/', $route->uri);
24+
25+
$this->assertEquals([
26+
'uses' => '\Inertia\Controller@__invoke',
27+
'controller' => '\Inertia\Controller',
28+
], $route->action);
29+
30+
$this->assertEquals([
31+
'component' => 'Component',
32+
'props' => ['prop1' => true, 'prop2' => false],
33+
], $route->defaults);
34+
}
35+
}

0 commit comments

Comments
 (0)