router = $router; $this->url = $url; } public function handle() { $outdir = realpath($this->argument('outdir')); $this->url->forceRootUrl($this->argument('rootUrl')); if (Str::startsWith($this->argument('rootUrl'), 'https')) { $this->url->forceScheme('https'); } File::copyDirectory(public_path(), $outdir); collect($this->router->getRoutes()->get()) ->filter(fn (Route $route) => in_array('static', $route->gatherMiddleware())) ->values() ->each(function (Route $route) use ($outdir) { if (! count($route->parameterNames())) { if ($route->getActionName() === '\\' . RedirectController::class) { // $action = $this->router->match('get', $route->defaults['destination'])->getAction(); // Redirects don't work yet $action = $route->getAction(); } else { $action = $route->getAction(); } if (! is_dir($path = $outdir . '/' . $route->uri())) { mkdir($path, 0777, true); } File::put($outdir . '/' . $route->uri() . '/index.html', $this->render($action['uses']())); } else { $model = 'App\\Models\\' . ucfirst($parameter = $route->parameterNames()[0]); $root = (string) Str::of($outdir . '/' . $route->uri())->before("{{$parameter}}"); foreach ($model::cursor() as $instance) { if (! is_dir($path = $root . $instance->getRouteKey())) { mkdir($path, 0777, true); } File::put($path . '/index.html', $this->render($route->getAction()['uses']($instance))); } } }); return 0; } protected function render ($response) { if ($response instanceof Renderable) { return $response->render(); } return $response; } }