J'ai un code en symfony qui genere les pages en ajax avec jquery. la route de chaque page est recuperée dans un unique controller TabsController. Avec cette approche, j'ai du modifier dynamiquement l'url en fonction de la page appelée, du coup si on est a acceuil l'url sera http://127.0.0.1:8000/acceuil cette approche fonctionne si on en reste la, mais par contre si un utilisateur accede a l'acceuil directement depuis ce lien au dessus , on obient tout de suite une erreur vu que le controller lié a cet url n'existe pas vraiment.

class TabsController extends AbstractController
{
    #[Route('/', name: "Home")]
    public function index()
    {
        return $this->render('index.html.twig');

    }

    #[Route('/tab/{tab}', name: "tab_content")]
    public function getTabContent(string $tab): JsonResponse
    {
        switch ($tab) {
            case 'Home':
                $content = $this->renderView('home/home.html.twig');
                break;
            case ...:
                ......
       }
       return new JsonResponse(['content' => $content]);
 }

Ce que je veux

je souhaite donc pouvroir faire ensorte que lorsqu'un utilisateur accede directement au lien donné au dessus, il puisse etre dirigeé vers la bonne page. Bien sur j'ai crée des controller pour ces page mais ca a fonctionné , mais je me suis heurté a un nouveau probleme c'est que la page de base contient un header et une side par qui sont sensé resté static mais en utilisant ces controller tous disparait vu que je suis diriger vers une nouvelle page

voici le contenue de base.html.twig

<body>
        {% block header %}{% include "includes/_header.html.twig" %}{% endblock %}
        <main class="sidebarscontainer">
            <aside class="sidebar_contains sidebar_is_hidden">
                {% include "includes/_sidebar.html.twig" %}
            </aside>
            <section class="content">
                <div class="progressContainer Loader">
                    <div class="progressCenter">
                        <div class="progress"></div>
                    </div>
                </div>

                <div id="tab-content">
                    {% block body %}{% endblock %}
                </div>
        </main>
        <script src="https://code.iconify.design/iconify-icon/1.0.0/iconify-icon.min.js"></script>
        <script src="{{asset('functions/initTabs.js')}}" type="module"></script>
        {% block javascripts %}
            {{ encore_entry_script_tags('main') }}
        {% endblock %}
    </body>

chaque page est injecté dans la div avec l'id tab-content

2 réponses


Salut.

Est-ce que c'est une obligation que ce soit par Ajax façon SPA ? Regarde https://ux.symfony.com/turbo qui va énormément te macher le travail.

merci beacoupt je jette un oeuil tout de suite