Quantcast
Channel: Grafikart | Derniers Sujets du forum
Viewing all 1542 articles
Browse latest View live

Tuto Gestion des options problème

$
0
0

Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

Décrivez ici votre code ou ce que vous cherchez à faire

php bin/console make:crud Option

created: src/Controller/OptionController.php
created: src/Form/OptionType.php
created: templates/option/_delete_form.html.twig
created: templates/option/_form.html.twig
created: templates/option/edit.html.twig
created: templates/option/index.html.twig
created: templates/option/new.html.twig
created: templates/option/show.html.twig

Success!

Next: Check your new CRUD by going to /option/

L'accès à '' /option/ '' a bien reussi correctement parce que j'ai modifié le fichier vendor\doctrine\orm\lib\Doctrine\ORM\Persisters\Entity\BasicEntityPersister.php
//$from = ' FROM ' . $tableName . ' '. $tableAlias;
à
$from = ' FROM ' . $tableName . ' '. $tableAlias;

Ce que je veux

Créer nouveau option par exemple '' Balcon " en accèdant: http://localhost:8000/option/new

Ce que j'obtiens

An exception occurred while executing 'INSERT INTO option (name) VALUES (?)' with params ["Balcon"]:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'option (name) VALUES ('Balcon')' at line 1


make:entity make:form aborted

$
0
0

Bonjour,
Fan de symfony et suite à la réinstallation de window10 dès que je fais dans la console make:entity où make:form
j'ai une réponse Aborted
Pouvez vous m'aider

Voila je rencontre un petit problème avec mon code.

Ce que je fais

PS C:\wamp64\www\project> php bin/console make:entity

Class name of the entity to create or update (e.g. OrangePuppy):

Aborted.

make:entity [-a|--api-resource] [--regenerate] [--overwrite] [-h|--help] [-q|--quiet] [-v|vv|vvv|--verbose] [-V|--version] [--ansi] [--no-ansi] [-n|--no-interaction] [-e|--env ENV] [--no-debug] [--] []

Décrivez ici votre code ou ce que vous cherchez à faire

Entourez votre code pour bien le mettre en forme

Ce que je veux

Décrivez ici ce que vous cherchez à obtenir

Ce que j'obtiens

Décrivez ici vos erreurs ou ce que vous obtenez à la place de ce que vous attendez :(

Problème de mise en place base de donnée sqlite

$
0
0

Bonjour,

en faite j'ai un problème avec symfony 4.4 pour remplacer la base de donnée mysql par sqlite , et donc en faite j'ai déja fait des recherches sur le sujet et donc j'ai déja fait certaine choses comme :

mais , je tombe à chaque fois sur ces lignes d'érreur écrites en rouge

FormType utilisateur par classe et école

$
0
0

Bonjour,

Je rencontre un soucis, j'ai besoins de créer un formulaire de présence pour des élèves, pour cela j'ai besoins d'afficher les élèves d'une classe et d'une école mais je n'arrive pas à faire cela.

Voici mon formType :

<?php

namespace App\Form;

use App\Entity\Timesheet;
use App\Entity\Student;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;

class TimesheetType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('Students', EntityType::class, [
                'class' => Student::class,
                'choice_label' => function (Student $student) {
                    return $student->getName() . ' ' . $student->getLastname();
                },
                'expanded'     => true,
                'multiple'     => true,
                'label' => 'Eleve',
                'attr' => ['class' => 'form-control']
            ])
            ->add('presence', CheckboxType::class, [
                'label' => 'Présent',
                'required' => false,
                'attr' => ['class' => 'form-control'],
                'value' => 0,
            ])
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
        ]);
    }
}

Merci à tous

Form checkbox

$
0
0

Bonjour,

Je souhaiterais ajouter une checkbox (boolean) pour chaque utilisateur affiché dans mon formulaire, mais j'avoue je ne sais pas du tout comment m'y prendre. Quelqu'un serait m'expliquer cela ?

Merci à tous.

Cache symfony trop lent

$
0
0

Bonjour les amis

Depuis 2 jours mon cache symfony met beaucoup trop de temps à se vider.

Parfois de 10 minute.

De plus à la dès que je fais quelques changements au niveau de la vue, et je rafraîchie la page, le temps de rafraîchissement met plus 2 minutes, ce qui m'oblige pas la suite à faire encore un

php bin/console c:c

Quelqu'un connaîtrait la raison de ce ralentissement et comment je peux y remédier ?

Pour info je suis sous symfony 4.3.9

Problème avec make:entity

$
0
0

Bonjour,

Je suis le tutoriel Symfony 4 par l'exemple (3/16) : Découverte de doctrine. Lorsque je lance la commande :

php bin/console entity:make

J'ai un message Aborted avant même de pouvoir mettre le nom de l'entité que je veux créer et je retourne sur l'invite de commande. J'ai essayé toutes les options possibles, rien ne fonctionne.

Comment déployer une application Symfony sous Windows

$
0
0

Bonjour,
Je viens de lire encore et encore la doc officielle de symfony.
Et de regarder aussi sur me net pour trouver une solution.

Je cherche une solution qui fait le travail de déploiement aussi bien que l'outil RSync mais qui fonctionne très bien sous windows.

J'ai vu que Git le fait, mais d'après ce que j'ai compris, il ne le ferai pas aussi bien.

Y-a-t-il une solution qui fait le travail aussi bien que RSync etqui fonctionne sous Windows ?


Formulaire non valide

$
0
0

Bonjour,

Dans un projet Symfony, je tente d'uploader plusieurs photos depuis un formulaire en utilisant vichUloaderBundle et LiipBundle.

Voici la fonction dans mon controller permettant d'afficher et de traiter le formulaire :

    /**
     * Creating and updating advert photos
     *
     *  @Route("/media/advert_photos/create/{id}", name="media.advert_photos.create")
     * 
     * @param Advert $advert
     * @param Request $request
     * @param EntityManagerInterface $manager
     * 
     * @return Response
     */
    public function photosForm(Advert $advert, Request $request, EntityManagerInterface $manager): Response 
    {

        $recordedPhotos = $advert->getPhotos();
        $numberRecordedPhotos = count($recordedPhotos);

        $editMode = false;
        $current_menu = 'add_advert';

        if ($numberRecordedPhotos > 0) 
        {

            $editMode = true;
            $current_menu = 'dashbord';

        }

        $form = $this->createForm(PhotosAdvertType::class, $advert);

        $form->handleRequest($request);

        if($form->isSubmitted())
        {

            \dump($form->isValid());
            \dump($advert->getPhotos());

        }

        if($form->isSubmitted() && $form->isValid()) 
        {

            $photos = $advert->getPhotos();
            $numberPhotos = $photos->count();

            $checkedMain = 0;

            if ($numberPhotos > 0) 
            {

                foreach ($photos as $photo) 
                {

                    $photo->setAdvert($advert);

                    if ($photo->getMainPhoto()) 
                    {

                        $checkedMain++;

                    }
                }

            }

            if ($numberPhotos > 0 && $checkedMain == 0) 
            {

                $error = new FormError("At least one photo must be checked as the main: it will be displayed in the list of adverts.");
                $form->addError($error);

            }
            elseif ($checkedMain > 1) 
            {

                $error = new FormError("There can only be one photo checked as the main.");
                $form->addError($error);

            }

            $manager->persist($advert);
            $manager->flush();   

            if ($editMode) 
            {

                $this->addFlash('success', 'The photos have been successfully updated.');

            }
            else
            {

                $this->addFlash('success', 'Photos have successfully been added to your advert.');

            }           

            return $this->redirectToRoute('advert.periods.create', array('id' => $advert->getId()));
        }        

        return $this->render('advert/photosCreation.html.twig', [
                                                                    'form' => $form->createView(),
                                                                    'recordedPhotos' => $recordedPhotos,
                                                                    'bodyId' =>  'photosCreation',
                                                                    'editMode' => $editMode,
                                                                    'current_menu' => $current_menu
                                                                ]
                            )
        ;

    }

Voici mon formulaire principal :

<?php

namespace App\Form\advert;

use App\Entity\advert\Advert;
use App\Form\media\PhotoType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Validator\Constraints\Valid;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;

class PhotosAdvertType extends AbstractType
{

    public function buildForm(FormBuilderInterface $builder, array $options)
    {

        $builder
            ->add('photos', CollectionType::class, array(
                                                            'entry_type' => PhotoType::class,  
                                                            'prototype' => true,
                                                            'allow_add' => true,
                                                            'allow_delete' => true,
                                                            'by_reference' => false,
                                                            'required' => false,
                                                            'constraints' => array(new Valid()),
                                                            'label' => false
                                                        )
                 )
            ->add('deletedPhotos', HiddenType::class, array('mapped' => false))
        ;

    }

    public function configureOptions(OptionsResolver $resolver)
    {

        $resolver->setDefaults(
                                [
                                    'data_class' => Advert::class, 
                                    'translation_domain' => 'forms'
                                ]
                              )
        ;

    }

}

Voici le formulaire embarqué pour chaque photo ajoutée à la volée via du javascript :

<?php

namespace App\Form\media;

use App\Entity\media\Photo;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Validator\Constraints\File;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;

class PhotoType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('file', FileType::class, array( 
                                                        'label' => false, 
                                                        'required' => true, 
                                                        'constraints' => array(new File(),),
                                                     )
                      )
        ;

        if(! $options['profilePhoto'])
        {

            $builder->add('mainPhoto', CheckboxType::class);

        }


        $builder->add('name', HiddenType::class);

    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Photo::class,
            'profilePhoto' => false,
            'translation_domain' => 'forms',
        ]);
    }
}

Voici le template appelé dans mon controller :

{% extends 'base.html.twig' %}

{% block title %}
    Roadtripr - Management of your vehicle photos
{% endblock %}

{% block body %}

<div class="container pb-5">
  <div class="row">
    <div class="col">
    <h1>Add a vehicule</h1>
    {{ include('_messages.html.twig') }}
    </div>
  </div>

  <div class="row justify-content-center">
    <div class="col-md-8 order-2">

        <h2>Photos of your vehicule</h2>
        <p>Please add as many pictures as you want here. Don't forget to specify which one you want to be seen in the search results.</p>
        {{ form_start(form) }}

            <ul class= "photos" data-prototype= " {{ form_widget ( form.photos.vars.prototype )| e ( 'html_attr' ) }} " >

                {% set i = 0 %}

                  {% if editMode %}                

                    {% for photo in form.photos %}

                        {{ include('advert/_photoCreation.html.twig') }}

                        {% set i = i + 1 %}

                    {% endfor %}

                  {% endif %}

            </ul>

            {{ form_row(form.deletedPhotos) }}

            <div class="text-left">

                <a href="#" class="btn btn-secondary" id="add_photo_link">Add a photo</a>

            </div>

            <div class="text-right">
              <button type="submit" class="btn btn-primary">Next &#8594;</button>
            </div>
            <div class="float-left">
              <button type="submit" class="btn btn-link">&#8592; Previous</button>
            </div>
            {{ form_end(form) }}
          </div>
          <div class="col-md-4 order-1">
          <ul class="timeline">
              <li class="timeline-down">
                <h5 class="mb-1">Step 1</h5>
                <p>Describe your vehicule</p>
              </li>
              <li class="timeline-down">
                <h5 class="mb-1">Step 2</h5>
                <p>Technical informations of your vehicule</p>
                </li>
              <li class="timeline-active">
                <h5 class="mb-1">Step 3</h5>
                <p>Photos of your vehicule</p>
              </li>
            </ul>
          </div>
        </div>
      </div>


    </div>

    {% block javascripts %}

        {{ parent() }}

        {{ encore_entry_script_tags('photosCreation') }}

    {% endblock %}

{% endblock %}

Et enfin, voici le template imbriqué :

<li id="li_photo_{{ recordedPhotos[i].id }}"> 

    <div style='display: none'>

        {{ form_row(photo.file) }}

    </div>

    <img id="photo_{{ recordedPhotos[i].id }}"  src="{{ vich_uploader_asset(recordedPhotos[i], 'file') | imagine_filter('thumb') }}" 
         width="100" alt="Photo{{ recordedPhotos[i].id }}">

    {{ form_row ( photo.mainPhoto ) }}
    {{ form_row ( photo.name ) }}

    <a href="{{ path('media.photo.delete', {id: recordedPhotos[i].id}) }}" class="btn btn-danger"  data-link-type="photoRemoving" 
       data-creation="no-dynamically" data-redirection="{{ path('media.advert_photos.create', {id: recordedPhotos[i].advert.id}) }}">

       Remove this photo

    </a>

</li>

Lorsque je soumets le formulaire contenant plusieurs photos, j'obtiens le message d'erreur suivant :

An exception has been thrown during the rendering of a template ("Parameter "path" for route "liip_imagine_filter" must match ".+" ("" given) to generate a corresponding URL.").

En cherchant, j'ai compris que mon formulaire est considéré comme invalide, car, dans mon controller, le code suivant :

        if($form->isSubmitted())
        {

            \dump($form->isValid());
            \dump($advert->getPhotos());

        }

me donne false pour la première ligne.

Cependant, je ne comprends pas pourquoi.

Quelqu'un aurait une idée?

Merci d'avance pour votre aide!

Déployer Symfony 4 ou 5 avec DEPLOYER

$
0
0

Bonjour,

Quelqu'un ici a déjà déployé un projet symfony 4 ou 5 avec DEPLOYER ?

LiipImagineBundle Problème Tutoriel grafikart: Image à la une (10/16)

Système de like

$
0
0

Bonjour,

Je cherche à faire système de like mais je n'arrive pas à prévisualiser le comment faire.

Ce que je fais

J'ai une entité user et entité article donc l'idée c'est que les utilisateurs puissent aimer l'article.
Du coup je ne sais pas si je dois faire une entité like dans laquelle se trouve $users et $articles relié ManyToOne.

J'ai besoin d'un coup de main question logique à adopter pour la mise en place, je débute sous sf donc ça reste encore peu flou :)

Merci à vous par avance.

Installer un projet symfony sur Infomaniak

$
0
0

Bonjour,

Je viens enfin d'installer un projet symfony sur Infomaniak.

Problème, les images ne se charge pas, le css ne se charge pas.

Alors qu'en local, ça fonctionne bien.

D'où peut venir se problème ?

Probleme lors de l'execution des fixtures

$
0
0

Bonjour,

Voila je rencontre un petit problème avec mon code
je suis la premiere partie des tutos sur symfony, mais là je suis bloqué quand je veux executer la fonction load() dans datafixtures

Entourez votre code pour bien le mettre en forme

Ce que je veux

inserer les fixtures créés dans ma base de donnée

Ce que j'obtiens

In FileLoader.php line 173:

Expected to find class "App\DataFixtures\Articlesfixtures" in file "C:\Users\Bigga\bog_symfony\src/DataFixtures\Articlesfixtures.php" while importing services from
resource "../src/*", but it was not found! Check the namespace prefix used with the resource in C:\Users\Bigga\bog_symfony\config/services.yaml (which is loaded i
n resource "C:\Users\Bigga\bog_symfony\config/services.yaml").

In FileLoader.php line 206:

Expected to find class "App\DataFixtures\Articlesfixtures" in file "C:\Users\Bigga\bog_symfony\src/DataFixtures\Articlesfixtures.php" while importing services from
resource "../src/*", but it was not found! Check the namespace prefix used with the resource.

L'affichage des messages flash ne fonctionne pas

$
0
0

Bonjour,

J'utilise la version 4.3.9 de Symfony.

Lors de l'envoi d'un formulaire, je veux avertir l'utilisateur du statut de sa demande. Pour ce faire, je tente d'utiliser les messages flash, mais ils ne sont pas affichés.

Voici le code de la fonction de mon controller :


    /**
     * User request to change its password
     * 
     * @Route("/security/resetting/request", name="security.resetting.request")
     *
     * @param Request $request
     * @param \Swift_Mailer $mailer
     * @param TokenGeneratorInterface $tokenGenerator
     * @param EntityManagerInterface $manager
     * @param UserRepository $userRepository
     * 
     * @return Response
     */
    public function resetingRequest(Request $request, \Swift_Mailer $mailer, TokenGeneratorInterface $tokenGenerator, EntityManagerInterface $manager, 
                                    UserRepository $userRepository): Response
    {

        $administrator = $userRepository->findOneBy(array('name' => 'administrator'));

        $form = $this->createFormBuilder()
                     ->add('email', EmailType::class, ['constraints' => [
                                                                            new Email(),
                                                                            new NotBlank()
                                                                        ]
                                                      ]
                          )
                     ->getForm();

        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) 
        {

            $user = $manager->getRepository(User::class)->loadUserByEmail($form->getData()['email']);

            if (! $user) 
            {
                \dump($user);
                $this->addFlash('error', "The email address isn't linked to a Roadtrip user.");

                //return $this->redirectToRoute("security.resetting.request");

            }
            else
            { 

                $user->setToken($tokenGenerator->generateToken());
                $user->setPasswordRequestedAt(new \Datetime());
                $manager->flush(); 

                $mail = new Mail;

                $mail->setReceiver($user)
                    ->setSubject($this->getParameter('password_Resetting_email_subject'))
                    ->setSender($administrator)
                    ->setMessage('Password renew')
                    ->setBody($this->renderView(
                                                    'security/passwordResettingEmail.html.twig', 
                                                    ['mail' => $mail]
                                                )
                                )
                ;

                if ($mail->sendEmail($mailer))
                { 

                    $manager->persist($mail);
                    $manager->flush();

                    $this->addFlash('success', "An email has been sent to the registered email address in your account so you can change your password.");

                    //return $this->redirectToRoute("security.login");

                }
                else
                {

                    $this->addFlash('error', "Impossible to send a confirmation email to change your password.");

                    //return $this->redirectToRoute("security.resetting.request");

                }

            }

            return $this->redirectToRoute("security.resetting.request");

        }

        return $this->render('security/passwordResettingRequest.html.twig', [
                                                                                'form' => $form->createView(),
                                                                                'bodyId' =>  'secutityResettingRequest'
                                                                            ]
                            )
        ;

    }

Voici maintenant le code de mon template :


{% extends 'base.html.twig' %}

{% block title %}
    Roadtripr - Password ressetting request
{% endblock %}

{% block body %}
    {% for label, messages in app.flashes %}
        {% for message in messages %}
            <div class="flash-{{ label }}">
                {{ message }}
            </div>
        {% endfor %}
    {% endfor %}
...

Quelqu'un aurait une idée sur la provenance du problème?

Merci d'avance pour votre aide.


memory limit

$
0
0

Bonjour,
sur mac os j'ai un probleme de memory limit. j'ai modifier tous mes fichier php.ini mais rien ne change

Problème lors du branchement de mon application React à Symfony

$
0
0

Bonjour à tous,

je rencontre un problème lors du branchement de mon application React à ma page d'accueil Symfony.

Pour faire bref j'ai créer une api REST avec symfony et je souhaite développer la partie front-end avec React,
J'ai installé webpack je l'ai configuré, j'ai inclus les liens vers les fichiers compilés :

Mon fichier index.html.twig :

{% extends 'base.html.twig' %}

{% block title "Mon application React" %}

{% block stylesheets %}
   {{ encore_entry_link_tags('app') }}
{% endblock %}

{% block body %}
    <h1>Page d'accueil</h1>
{% endblock %}

{% block javascripts %}
    {{ encore_entry_script_tags('app') }}


{% endblock %}

Mon fichier entrypoints.json :

{
  "entrypoints": {
    "app": {
      "js": [
        "http://localhost:8080/build/runtime.js",
        "http://localhost:8080/build/vendors~app.js",
        "http://localhost:8080/build/app.js"
      ],
      "css": [
        "http://localhost:8080/build/app.css"
      ]
    }
  }
}

J'obtiens lors du lancement du server :

npm run dev-server

Une erreur car dans l'adresse je suis dans le 127.0.0.1:8000
Mon application symfony essaye de parler avec le dev server sauf que mon application est à l'adresse 127.0.0.1 alors que mon dev server et à l'adresse localhost et comme c'est pas les mêmes adresses il me fait un refus de connexion.
je vais donc sur le localhost:8000 mais j'obtiens quand même des erreurs
Mon dev server tourne sur le port 80 du coup j'ai modifié le lien dans le package.json

"dev-server": "encore dev-server --port 8080",

je relance le server
j'obtiens toujours des erreurs de type :

sockjs.js:1606 GET https://localhost:8080/sockjs-node/info?t=1578170022570 net::ERR_SSL_PROTOCOL_ERROR
client:172 [WDS] Disconnected!
GET https://localhost:8080/sockjs-node/info?t=1578170023958 net::ERR_SSL_PROTOCOL_ERROR
sockjs.js:1606 GET https://localhost:8080/sockjs-node/info?t=1578170026329 net::ERR_SSL_PROTOCOL_ERROR
GET https://localhost:8080/sockjs-node/info?t=1578170030736 net::ERR_SSL_PROTOCOL_ERROR
etc...

comment resoudre celà ?
est ce que quelqu'un à déjà eu cette erreur ?

Limiter le nombre de fichiers sessions

$
0
0

Bonjour,

Voila je rencontre un petit problème avec le nombre de sessions :

sur un site, au bout de qques semaines, je me retrouve avec plus d'un million de sessions dans le repertoire var/sessions
(du coup, difficile à supprimer d'un coup d'ailleurs sur le serveur...)

je suis en SF 3

A part un CRON régulier de ménage, il y a t-il un autre moyen ?

Merci pour votre réponse et bonne année à tous !

Problème connexion bdd symfony 4.3

$
0
0

Bonjour,
Après avoir développé mon application en local je souhaite la mettre en ligne, j'ai donc commandé un serveur mutualisé sur OVH, mais après la mise en ligne de mon projet impossible de me connecter à ma bdd.

Mon fichier .env contient l'url sous cette forme :
DATABASE_URL=mysql://xxxxxx:xxxxxxx@xxxxxx.mysql.db:3306/xxxxxxxx

Et j'obtiens l'erreur suivante : hôtes inconnu

J'ai également fait des tests avec une simple connexion via PDO et celle-ci à très bien fonctionné.

Merci d'avance,

Robin.

Erreur 302 lors de la redirection

$
0
0

Bonjour,

J'ai un formulaire d'inscription qui s'affiche de manière modale dans mon template de base "base.html.twig" afin qu'il soit accessible sur toutes les pages :

...
              <a id="call_registration_modal_btn" class="btn btn-secondary btn-dark {% if current_menu is defined and current_menu == 'registration' %}active{% endif %}" data-focus=true data-backdrop="static" data-keyboard="false" data-toggle="modal" href="#registrationModal">Sign up</a>
...
      {% if app.session.get('errorFomRegistration') %}
        <div id="registrationModal" class="modal fade" role="dialog" data-visibility='1'>
      {% else %}
        <div id="registrationModal" class="modal fade" role="dialog" data-visibility='0'>
      {% endif %}
          <div class="modal-dialog">
            <div class="modal-content">
              <div class="modal-header">
                <h4 class="modal-title">Sign up</h4>
                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                  <span aria-hidden="true">&times;</span>
                </button>
              </div>
              <div class="modal-body">
                <div>
                  {% if app.session.get('errorFomRegistration') %}
                    {{ include('_messages.html.twig') }}
                  {% endif %}
                </div>
                {{ render(controller('App\\Controller\\security\\SecurityController::registration', {'request': app.request})) }}
              </div>
            </div>
          </div>
        </div>
        </div>
...

Lorsque je clique sur le bouton "Sign up", tout se passe correctement avec un affichage modal du formulaire d'inscription.

Mon problème survient lorsque j'ai des erreurs au niveau du formulaire : je voudrais que la page à partir de laquelle il a été appelé soit ré-affichée et que le formulaire apparaisse en modal. Cependant, j'obtiens l'erreur suivante lors de la soumission du formulaire contenant des erreurs :

"An exception has been thrown during the rendering of a template ("Error when rendering "http://127.0.0.1:8000/" (Status code is 302).")."

Pour rappeler la page courante et indiquer s'il existe des erreurs au niveau du formulaire, dans mon controller, j'utilise une variable de session qui indique que le formulaire n'est pas valide et j'effectue une redirection vers la route courante :


class SecurityController extends AbstractController
{

    /**
     * User registration
     * 
     * @Route("/security/registration/{shortForm}", name="security.registration")
     *
     * @param bool $shortForm
     * @param Request $request
     * @param EntityManagerInterface $manager
     * @param UserPasswordEncoderInterface $encoder
     * @param AuthorizationCheckerInterface $authChecker
     * @param \Swift_Mailer $mailer
     * @param UserRepository $userRepository
     * 
     * @return Response
     */
    public function registration(bool $shortForm = false, Request $request, EntityManagerInterface $manager, UserPasswordEncoderInterface $encoder, 
                                  AuthorizationCheckerInterface $authChecker, \Swift_Mailer $mailer, UserRepository $userRepository): Response
    {

        $this->container->get('session')->set('errorFomRegistration', false);
...
            $form = $this->createForm(UserType::class, $user, array('isAdmin' => $isAdmin, 'roles' => $this->getParameter('security.role_hierarchy.roles')));
            $template = 'security/registration.html.twig';
...
        $form->handleRequest($request);

        if ($form->isSubmitted())
        {

            if ($form->isValid())
            {
...
            }
            else 
            {

                $this->container->get('session')->set('errorFomRegistration', true);

                $route = $request->attributes->get('_route');

                return $this->redirectToRoute($route);

            }
...

Comme repris dans le premier bloc de code, en cas de formulaire non valide, j'indique que le formulaire modal doit être visible :


...
      {% if app.session.get('errorFomRegistration') %}
        <div id="registrationModal" class="modal fade" role="dialog" data-visibility='1'>
      {% else %}
        <div id="registrationModal" class="modal fade" role="dialog" data-visibility='0'>
      {% endif %}
...
                {{ render(controller('App\\Controller\\security\\SecurityController::registration', {'request': app.request})) }}
...

Afin d'afficher le formulaire en modal en cas d'erreur, j'utilise du Javascript au chargement de la page :


...
jQuery( document ).ready( function( $ ){
...
  // Display the login modal form if there is an autentication error
  var $registrationDiv = $('#registrationModal');

  if($registrationDiv.data('visibility') == '1')
  {

    $registrationDiv.modal('show');

  }

});

Quelqu'un aurait une idée de solution pour régler ce problème d'erreur 302 ?

Merci d'avance pour votre aide.

Viewing all 1542 articles
Browse latest View live