Logo

Routeur

urlpatterns!, parametres de chemin, liens nommes.

urlpatterns! — declaration des routes url.rs
use runique::prelude::*;
use crate::views::*;

pub fn routes() -> Router {
    urlpatterns! {
        "/"                 => view! { index },          name = "index",
        "/articles"         => view! { article_list },   name = "article_list",
        "/articles/{id}"    => view! { article_detail }, name = "article_detail",
        "/articles/{id}/edit" => view! { article_edit }, name = "article_edit",
        "/inscription"      => view! { inscription },    name = "inscription",
    }
}
urlpatterns! — declaration des routes url.rs
use runique::prelude::*;
use crate::views::*;

pub fn routes() -> Router {
    urlpatterns! {
        "/"                 => view! { index },          name = "index",
        "/articles"         => view! { article_list },   name = "article_list",
        "/articles/{id}"    => view! { article_detail }, name = "article_detail",
        "/articles/{id}/edit" => view! { article_edit }, name = "article_edit",
        "/inscription"      => view! { inscription },    name = "inscription",
    }
}
Lire un parametre de chemin handler
// Route : "/articles/{id}"
pub async fn article_detail(mut request: Request) -> AppResult<Response> {
    let id = request.path_param("id")
        .and_then(|s| s.parse::<i32>().ok())
        .unwrap_or(0);

    let db = request.engine.db.clone();
    let article = article::Entity::find_by_id(id)
        .one(&*db).await.unwrap_or(None);

    context_update!(request => { "article" => &article });
    request.render("article/detail.html")
}
Lire un parametre de chemin handler
// Route : "/articles/{id}"
pub async fn article_detail(mut request: Request) -> AppResult<Response> {
    let id = request.path_param("id")
        .and_then(|s| s.parse::<i32>().ok())
        .unwrap_or(0);

    let db = request.engine.db.clone();
    let article = article::Entity::find_by_id(id)
        .one(&*db).await.unwrap_or(None);

    context_update!(request => { "article" => &article });
    request.render("article/detail.html")
}
Liens nommes dans les templates template
{# Route simple — pretraite en {{ link(link=''index'') }} #}
<a href='{% link "index" %}'>Accueil</a>

{# Parametre de route — pretraite en {{ link(link=''article_detail'', id=article.id) }} #}
<a href='{% link "article_detail" id=article.id %}'>{{ article.title }}</a>

{# Sans query — URL propre #}
<a href='{% link "article_list" %}'>Tous les articles</a>

{# Avec query — pretraite en {{ link(link=''article_list'', query={page: 2}) }} #}
<a href='{% link "article_list" query={page: 2} %}'>Page suivante</a>
Liens nommes dans les templates template
{# Route simple — pretraite en {{ link(link=''index'') }} #}
<a href='{% link "index" %}'>Accueil</a>

{# Parametre de route — pretraite en {{ link(link=''article_detail'', id=article.id) }} #}
<a href='{% link "article_detail" id=article.id %}'>{{ article.title }}</a>

{# Sans query — URL propre #}
<a href='{% link "article_list" %}'>Tous les articles</a>

{# Avec query — pretraite en {{ link(link=''article_list'', query={page: 2}) }} #}
<a href='{% link "article_list" query={page: 2} %}'>Page suivante</a>