8768 sujets

Développement web côté serveur, CMS

Bonjour à tous,

Je pensais avoir bien compris le fonctionnement des routes avec Silex et de l'écriture simplifiée par twig, mais là je bloque.

En résumé :
J'ai sur mon site plusieurs formulaires pour enregistrer les infos sur un auteur, un artiste ... dans ma base de données, à l'adresse /ajout/...
J'aimerais qu'à la validation du formulaire :
1) les données soient enregistrées,
2) la page avec le bon formulaire soit rechargée.

Mon code :
Pour l'affichage du formulaire et l'enregistrement des données :

$app->get('/administration/ajout/{type}', 'app\controllers\AdministrationController::record')->bind('administration_record');
$app->post('/administration/ajout/{type}', 'app\controllers\AdministrationController::record')->bind('administration_record_save');


Les pages qui gèrent l'affichage des formulaires :
Le fichier administration_record.twig :

{% extends 'layout.twig' %}
{%  block title %}Administration{% endblock %}
{%  block content %}

    <h2>Page d'ajout de fiche :</h2>

{% endblock %}


Le fichier administration_record-artist.twig :

{% extends 'administration_record.twig' %}
{%  block title %}Ajout d'artiste{% endblock %}
{%  block content %}

    {{ parent() }}

    <form action="post">

<!-- le contenu de mon formulaire -->

                    <button type="submit">Valider</button>
                    <button type="reset">Annuler</button>
</form>

{% endblock %}


Le controller :

public function record (Application $app, $type){

        switch ($type) {
            case "artiste":
                return $app['twig']->render('administration_record-artist.twig');
                break;
        }

        return $app['twig']->render('administration_record.twig');

    }

    public function recordOnDatabase (Application $app, Request $request) {

        // Enregistrement dans la base de données

        return $app['twig']->render('administration_record.twig');

    }


Le problème c'est que quand je valide le formulaire je ne suis apparemment pas redirigé dans la bonne fonction (si j'en crois les var_dump que j'utilise pour vérifier les données).

Pour réafficher le bon formulaire (administration_record-artist.twig par exemple), je dois remplacer mon return par un appel de la fonction record (pour ré-entrer dans le switch) ou je dois envoyer la variable $type dans le formulaire et faire :

return $app['twig']->render('administration_record.twig', [
            'type' => $type
        ]);

pour rappeler le bon type de formulaire ?
Modifié par AlexP (25 Jul 2017 - 16:02)