Logo

Créer un article de blog

formulaire/blog.rs
#[form(schema = blog,
       fields = [title, email, summary, website, content])]
pub struct BlogForm;

#[async_trait]
impl RuniqueForm for BlogForm {
    impl_form_access!(model);

    async fn clean(&mut self) -> Result<(), StrMap> {
        let mut errors = StrMap::new();
        if self.get_string("title").len() < 3 {
            errors.insert("title", "3 caractères minimum");
        }
        if !self.get_string("email").contains('@') {
            errors.insert("email", "Adresse invalide");
        }
        if errors.is_empty() { Ok(()) }
        else { Err(errors) }
    }
}
views.rs
pub async fn blog_submit(
    mut request: Request,
    Prisme(mut form): Prisme<BlogForm>,
) -> AppResult<Response> {
    if request.is_post() && form.is_valid().await {
        form.save(&db).await?;
        success!(request.notices => "Article publié !");
        return Ok(Redirect::to("/blog").into_response());
    }
    request.render("blog/blog.html")
}