Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
13 / 13
100.00% covered (success)
100.00%
1 / 1
CRAP
100.00% covered (success)
100.00%
1 / 1
RouteUtils
100.00% covered (success)
100.00%
13 / 13
100.00% covered (success)
100.00%
1 / 1
10
100.00% covered (success)
100.00%
1 / 1
 makeRoute
100.00% covered (success)
100.00%
13 / 13
100.00% covered (success)
100.00%
1 / 1
10
1<?php
2
3namespace San\Crud\Utils;
4
5
6use Illuminate\Support\Facades\Route;
7
8class RouteUtils {
9    public static function makeRoute(?string $name, string|array|null $vars, ?string $prefix) {
10        //check route exists
11        if (Route::has($name)) {
12            $args = is_scalar($vars) ? $vars : sprintf("compact(%s)", join(', ', array_map(fn($var) => sprintf("'%s'", $var), (array) $vars)) ?: '[]');
13            return sprintf("route('%s', %s)", $name, $args);
14        } else { //fallback code to handle undefined routes to prevent errors
15            $parts = explode('.', $name);
16            $values = array_values((array) $vars);
17
18            $path = [sprintf("'%s'", rtrim("/" . trim($prefix ?: '', '/'), '/'))];
19
20            for ($i = 0; $i < count($parts); $i++) {
21                if ($parts[$i] === 'index') continue;
22
23                if ($parts[$i] !== 'show') {
24                    $path[] = sprintf("'%s'", $parts[$i]);
25                }
26
27                if (!empty($values[$i])) {
28                    $path[] = is_scalar($vars) ? $values[$i] : sprintf("$%s?->id ?: 0", $values[$i]);
29                }
30            }
31
32            return sprintf("implode('/', [%s])", join(',', $path));
33        }
34    }
35}