$input */ public function create(Site $site, array $input): Redirect { $redirect = new Redirect; $redirect->site_id = $site->id; $redirect->from = $input['from']; $redirect->to = $input['to']; $redirect->mode = $input['mode']; $redirect->status = RedirectStatus::CREATING; $redirect->save(); dispatch(function () use ($site, $redirect): void { /** @var Service $service */ $service = $site->server->webserver(); /** @var Webserver $webserver */ $webserver = $service->handler(); $webserver->updateVHost($site); $redirect->status = RedirectStatus::READY; $redirect->save(); }) ->catch(function () use ($redirect): void { $redirect->status = RedirectStatus::FAILED; $redirect->save(); }) ->onConnection('ssh'); return $redirect->refresh(); } /** * @return array> */ public static function rules(Site $site): array { return [ 'from' => [ 'required', 'string', 'max:255', 'not_regex:/^http(s)?:\/\//', Rule::unique('redirects', 'from')->where('site_id', $site->id), ], 'to' => [ 'required', 'url:http,https', ], 'mode' => [ 'required', 'integer', Rule::in([ 301, 302, 307, 308, ]), ], ]; } }