Logo

Helpers & accès URL

Accès aux valeurs de formulaire et aux paramètres d'URL — helpers typés et accès whitelisté.

Démo live

Route active : /formulaires/helpers/rust  ·  from_url("search") : framework  ·  cleaned_string("search") : framework

Testez en modifiant l'URL :

/helpers/rust /helpers/rust?search=framework +is_admin=true (ignoré — hors whitelist)
Helpers POST — après is_valid()
// Valeur par défaut si le champ est vide
form.get_string("username")     // -> String  ("" si vide)
form.get_i32("age")           // -> i32     (0 par défaut)
form.get_f64("price")         // -> f64     (gère , → .)
form.get_bool("active")        // -> bool    (true/1/on → true)
form.get_uuid("ref")           // -> Uuid    (Uuid::nil() si vide)

// Option — None si vide
form.get_option("bio")         // -> Option<String>
form.get_option_i32("age")   // -> Option<i32>
form.get_option_f64("note")  // -> Option<f64>
form.get_option_bool("news") // -> Option<bool>
form.get_option_uuid("id")   // -> Option<Uuid>
clear() — vider le formulaire après traitement
// Re-rendre le formulaire vide après succès (sans redirect)
if form.is_valid().await {
    let path = form.cleaned_string("image"); // 1. lire avant clear
    // sauvegarder...
    form.clear();                               // 2. vider
    context_update!(request => { "upload_form" => &form });
    return request.render(template);            // 3. form vide affiché
}

// Avec redirect (PRG) : clear() inutile
// la nouvelle requête GET crée une instance fraîche automatiquement
Helpers date / heure
form.get_naive_date("birthday")
form.get_naive_time("meeting")
form.get_naive_datetime("event_start")
form.get_datetime_utc("created_at")

// Variantes Option
form.get_option_naive_date("birthday")
form.get_option_naive_datetime("event_start")
form.get_option_datetime_utc("created_at")
Accès brut aux paramètres d'URL — depuis Request
// Route déclarée : "/article/{id}"
let id   = request.path_param("id");   // Option<&str>

// Query string : /article/42?page=2
let page = request.from_url("page");  // Option<&str>
cleaned_*() — whitelisté, typé, toutes sources
// Priorité : POST → path param → query param
// None si le champ n'est pas déclaré dans le formulaire

form.cleaned_string("search")    // Option<String>
form.cleaned_i32("page")        // Option<i32>
form.cleaned_i64("id")          // Option<i64>
form.cleaned_f64("price")       // Option<f64>  (gère , → .)
form.cleaned_bool("active")     // Option<bool>
form.cleaned_string("is_admin") // None — champ inconnu
Exemple réel — recherche GET /blog/liste?search=rust
// views.rs — filtre articles selon query string
pub async fn blog_list(
    mut request: Request,
    Prisme(form): Prisme<SearchDemoForm>,
) -> AppResult<Response> {
    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)),
        );
    }
    // ...
}

// Exemple réel : recherche user /view-user?username=alice
let username = form.cleaned_string("username").unwrap_or_default();