crud<T extends Model> method

void crud<T extends Model>({
  1. String prefix = "",
  2. required CrudController<Model> controller,
  3. List<HttpMiddleware> middleware = const [],
})

Implementation

void crud<T extends Model>({String prefix = "", required CrudController controller, List<HttpMiddleware> middleware = const []}) {

  String getModelPath() {
    final loweredHyphenate = T.toString().replaceAllMapped(RegExp(r'(?<=[a-z])(?=[A-Z])'), (match) => '-').toLowerCase();

    if(loweredHyphenate == 'model' || loweredHyphenate == 'type') {
      return "";
    }
    return loweredHyphenate.endsWith("/") ? loweredHyphenate : "${loweredHyphenate}s";
  }


  final path = getModelPath();

  if(path.isEmpty && prefix.isEmpty) {
    throw Exception("Prefix or class constraint(T) recommended to generate resourceful routes. Generic crud methods (/index /create /show ... etc) as route paths cannot guarantee uniqueness or prevent overrides.");
  }

  if (!prefix.endsWith('/')) prefix = '$prefix/';


  group(
    prefix: "$prefix$path",
    middleware: middleware,
    routes: () {
      // index
      get("/", controller.index);

      // create
      get("/create", controller.create);

      // store
      post("/create", controller.store);

      // show
      get("/{id:int}", controller.show);

      // edit
      get("/{id:int}/edit", controller.edit);

      // update
      patch("/{id:int}/edit", controller.update);

      // destroy
      delete("/{id:int}", controller.destroy);
    },
  );
}