if ($req->isGet() && !$function) { return ApiMiddleware::result($instance); } // allow for JSON input or $_POST $input = $req->headers('CONTENT-TYPE') === 'application/json' ? array_merge($req->params(), (array) json_decode(file_get_contents('php://input'))) : $req->params(); // create request? if ($req->isPost() && !$function) { return ApiMiddleware::result(call_user_func_array(array($model, 'create'), array($input))); } // update request? if ($req->isPut() && !$function) { return ApiMiddleware::result(call_user_func_array(array($instance, 'update'), array($input))); } // delete request? if ($req->isDelete() && $id !== false && !$function) { return ApiMiddleware::result(call_user_func_array(array($model, 'trash'), array($id, $input))); } if ($function) { if (ApiMiddleware::isCallable($model, $function)) { if ($id !== false) { return ApiMiddleware::result(call_user_func_array(array($instance, $function), array($input))); } else { return ApiMiddleware::result(call_user_func_array(array($model, $function), array($input))); } } else { throw new AccessException(); } } else { throw new AccessException(null, 404); } })->via('GET', 'POST', 'PUT', 'DELETE');