page = $pageRepo; $this->assets = $assetService; $this->render = $renderService; $this->settings = $settingsService; $this->member = $memberRepo; } public function handleRequest(Request $request) { $path = explode('/', $request->path()); switch ($path[0]) { case 'page': $body = json_decode($request->getContent()); $result = $this->page->update($body); return response()->json($result)->header('Content-Type', 'application/json'); break; case 'settings': return $this->settingsTasks($request, $path[1]); break; } } private function settingsTasks($request, $task) { $result = []; switch ($task) { case 'publish': $this->assets->moveToTheme(true); $result = $this->render->publishAll(); break; case 'sync': $body = json_decode($request->getContent()); //update member if needed $this->member->update($body->member); //sync settings $result = $this->settings->sync($body); break; case 'nav-sync': $body = json_decode($request->getContent()); $result = $this->settings->navSync($body); break; } return response()->json($result)->header('Content-Type', 'application/json'); } }