DbRouterController::getRouteAction()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 4
nc 1
nop 1
dl 0
loc 6
ccs 4
cts 4
cp 1
crap 1
rs 10
c 0
b 0
f 0
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
The trait Illuminate\Routing\RouteDependencyResolverTrait requires some properties which are not provided by Oddvalue\DbRouter\Http\C...lers\DbRouterController: $name, $container
Loading history...
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