ruleset = new Ruleset(strict: true); $this->ruleset->GET([ (new Rules(WorkActionsModel::ANCHOR->value)) ->required() ->type(Type::STRING) ->min(1) ->max(parent::MYSQL_VARCHAR_MAX_LENGTH) ]); } // # Responses // Return 422 Unprocessable Content error if request validation failed private function resp_rules_invalid(): Response { return new Response($this->ruleset->get_errors(), 422); } // Return a 503 Service Unavailable error if something went wrong with the database call private function resp_database_error(): Response { return new Response("Failed to get work data, please try again later", 503); } public function main(): Response { // Bail out if request validation failed if (!$this->ruleset->is_valid()) { return $this->resp_rules_invalid(); } $resp = $this->db->for(WorkActionsModel::TABLE) ->where([WorkActionsModel::ANCHOR->value => $_GET[WorkActionsModel::ANCHOR->value]]) ->select([ WorkActionsModel::DISPLAY_TEXT->value, WorkActionsModel::HREF->value, WorkActionsModel::CLASS_LIST->value, WorkActionsModel::EXTERNAL->value ]); // Bail out if something went wrong retrieving rows from the database if (!parent::is_mysqli_result($resp)) { return $this->resp_database_error(); } return $resp->num_rows > 0 ? new Response($resp->fetch_all(MYSQLI_ASSOC)) : new Response([]); } }