@adonisjs/route-model-binding
Version:
Route model binding for AdonisJS
47 lines (46 loc) • 1.63 kB
TypeScript
import type { HttpContext } from '@adonisjs/core/http';
import { HttpRouterService } from '@adonisjs/core/types';
/**
* Resource loader job is to query the Lucid models for the given
* request using the route params.
*
* One can provide an array of models matching the position of params
* inside a route to conventionally query the database using Lucid
* models. For example:
*
* ```
* Route - /posts/:post_id/comments/:id
* Models: [Post, Comment]
* ```
*
* The resource loader will return the following response.
*
* ```ts
* {
* post_id: Post.findOrFail(post_id),
* id: Comment.findOrFail(id)
* }
* ```
*
* The first model will be matched against the first param. We use the position,
* since we plan to grab models using decorators and in TypeScript decorators
* cannot get the name of the parameter on a method.
*
* One can customize the lookup logic in one of the few ways.
*
* - /posts/:post(slug) - The slug field will be used for the lookup
* - /posts/:post/comments/:>comment - The comment will be loaded as the post relationship
* - Post.routeLookupKey - Define the key to be used to lookup the route
* - Post.findForRequest() - Define a custom static method to lookup Post for a given request
* - Post.findRelatedForRequest() - Define a custom method to lookup Comment for a given post
*/
export declare class ResourceLoader {
#private;
ctx: HttpContext;
resources: Record<string, any>;
constructor(ctx: HttpContext, router: HttpRouterService);
/**
* Load models based upon the current request route params
*/
load(models: any[]): Promise<void>;
}