Skip to content

Controllers

Controllers group related request-handling logic into a single struct.

Basic Controllers

Use the #[controller] attribute macro:

rust
use larastvel_core::controller;

#[controller]
impl UserController {
    async fn index() -> Json<Vec<User>> {
        // GET /users
    }

    async fn show(Path(id): Path<i32>) -> Json<User> {
        // GET /users/:id
    }
}

Resource Controllers

The ResourceController trait provides default implementations for RESTful actions:

rust
use larastvel_core::routing::ResourceController;
use larastvel_core::Resource;

#[derive(Resource)]
struct PostResource;

Generates routes for: index, create, store, show, edit, update, destroy.

Override specific methods:

rust
#[async_trait]
impl ResourceController for PostResource {
    const RESOURCE_NAME: &'static str = "posts";

    async fn index() -> Response {
        // Custom index logic
    }
}

Manual Resource Registration

For full control, implement ResourceController manually:

rust
impl PostController {
    fn register_routes(registrar: &Registrar) {
        registrar.get("/posts", Self::index);
        registrar.get("/posts/{id}", Self::show);
        registrar.post("/posts", Self::store);
    }
}

Route Registration

Connect controllers to routes in src/routes/web.rs:

rust
pub fn web(router: &Registrar) {
    PostResource::register_routes(router);
}

Released under the MIT License.