Helpers et accès à l'URL

Accès aux valeurs du formulaire et aux paramètres d'URL : helpers typés et accès par liste blanche.

Démo en direct

Route active : /formulaires/helpers/rust  ·  get_query("search"):  ·  cleaned::<String>("search"):

Testez en modifiant l'URL :

Helpers cleaned — liste blanche (POST > Path > Query)
// All methods return Option<T> (None if unknown or empty)
form.cleaned::<String>("username")   // -> Option<String>
form.cleaned::<i32>("age")         // -> Option<i32>
form.cleaned::<f64>("price")       // -> Option<f64>
form.cleaned::<bool>("active")      // -> Option<bool>
form.cleaned::<Uuid>("ref")        // -> Option<Uuid>

// Handling default values:
let user = form.cleaned::<String>("user").unwrap_or_default(); // String
let age  = form.cleaned::<i32>("age").unwrap_or(18);           // i32
clear() — vider le formulaire après traitement
// Re-render empty form after success (without redirect)
if form.is_valid().await {
    let path = form.cleaned::<String>("image"); // 1. read before clear
    // save...
    form.clear();                               // 2. clear
    context_update!(request => { "upload_form" => &form });
    return request.render(template);            // 3. empty form displayed
}

// With redirect (PRG): clear() unnecessary
// the new GET request creates a fresh instance automatically
Helpers de date et d'heure
form.cleaned::<NaiveDate>("birthday")
form.cleaned::<NaiveTime>("meeting")
form.cleaned::<NaiveDateTime>("event_start")
form.cleaned::<DateTime<Utc>>("created_at")

// All return Option<T>: None if unknown, empty or unreadable
Accès brut aux paramètres d'URL — depuis Request
// Declared route: "/article/{id}"
let id   = request.get_path("id");    // Option<&str>
let id   = request.get_path_as::<Pk>("id"); // Option<Pk>

// Query string: /article/42?page=2
let page = request.get_query("page"); // Option<&str>
cleaned_*() — liste blanche, typé, toutes les sources
// Priority: POST → path param → query param
// None if field is not declared in the form or is empty

form.cleaned::<String>("search")    // Option<String>
form.cleaned::<i32>("page")        // Option<i32>
form.cleaned::<i64>("id")          // Option<i64>
form.cleaned::<f64>("price")       // Option<f64>  (handles , → .)
form.cleaned::<bool>("active")     // Option<bool>
form.cleaned::<Uuid>("ref")       // Option<Uuid>
form.cleaned::<String>("is_admin") // None — unknown field
Exemple réel — recherche GET /blog/list?search=rust
// views.rs — filter articles according to query string
pub async fn blog_list(
    mut request: Request,
) -> AppResult<Response> {
    let form: SearchDemoForm = request.form("search");
    let search = form.cleaned::<String>("search");

    let mut query = BlogEntity::find();
    if let Some(ref term) = search {
        query = query.filter(
            Condition::any()
                .add(Column::Title.contains(term))
                .add(Column::Summary.contains(term)),
        );
    }
    // ...
}

// Example: user search /users?username=alice
let username = form.cleaned::<String>("username").unwrap_or_default();