1 | <?php |
||
2 | |||
3 | namespace Oddvalue\DbRouter\Http\Controllers; |
||
4 | |||
5 | use Oddvalue\DbRouter\Route; |
||
6 | use Illuminate\Routing\Controller; |
||
7 | use Oddvalue\DbRouter\Contracts\Routable; |
||
8 | use Illuminate\Routing\RouteDependencyResolverTrait; |
||
9 | |||
10 | class DbRouterController extends Controller |
||
11 | { |
||
12 | use RouteDependencyResolverTrait; |
||
0 ignored issues
–
show
introduced
by
![]() |
|||
13 | |||
14 | 9 | public function __invoke($url) |
|
15 | { |
||
16 | 9 | return $this->resolveRoute("/$url"); |
|
17 | } |
||
18 | |||
19 | 9 | protected function resolveRoute($url) |
|
20 | { |
||
21 | 9 | $route = Route::whereUrl($url)->withTrashed()->firstOrFail(); |
|
22 | |||
23 | 9 | if ($route->shouldRedirect()) { |
|
24 | 6 | return $this->redirect($route); |
|
25 | } |
||
26 | |||
27 | 3 | $routableInstance = $route->routable; |
|
28 | 3 | [$controller, $action] = $this->getRouteAction($routableInstance); |
|
29 | |||
30 | 3 | $parameters = $this->resolveClassMethodDependencies([$routableInstance], $controller, $action); |
|
31 | |||
32 | 3 | if (method_exists($controller, 'callAction')) { |
|
33 | 3 | return $controller->callAction($action, $parameters); |
|
34 | } |
||
35 | |||
36 | return $controller->{$action}(...array_values($parameters)); |
||
37 | } |
||
38 | |||
39 | 6 | protected function redirect($route) |
|
40 | { |
||
41 | 6 | return redirect($route->redirect_url, 301); |
|
42 | } |
||
43 | |||
44 | 3 | protected function getRouteAction(Routable $routableInstance) |
|
45 | { |
||
46 | 3 | $generator = $routableInstance->getRouteGenerator(); |
|
47 | return [ |
||
48 | 3 | app($generator->getRouteController($routableInstance)), |
|
49 | 3 | $generator->getRouteAction($routableInstance), |
|
50 | ]; |
||
51 | } |
||
52 | } |
||
53 |