Bonjour,

Je rencontre un petit problème avec mon code.

Pouvez-vous m'aider svp ? merci d'avance

Ce que je fais

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

J'essaie de supprimer mon entreprise

dans mon controller :

 /**
     * @Route("/entreprise/delete/{id}",name="entreprise_delete",)
     */

    public function delete($id)
    {
        $entityManager = $this->getDoctrine()->getManager();

        $entreprise = $entityManager->getRepository(Entreprise::class)->find($id);
        if (!$entreprise) {
            throw $this->createNotFoundException('aucune entreprise pour id ' . $id);
        }

        $entityManager->remove($entreprise);

        $entityManager->flush();

        $this->addFlash('success', 'Success delete');

        return $this->redirectToRoute('admin');
    }.

Dans ma vue twig :

    <a href="{{ path('delete', {'id': entreprise.id}) }}" class="color_blue"
                onclick=" return confirm('Attention,ceci va supprimer l\'entreprise') ">Supprimer</a>

Ce que je veux

je cherche à supprimer mon entreprise

Ce que j'obtiens

Notice: Undefined index: entreprise

22 réponses


Murphy-NZL
Réponse acceptée
/**
 * @Route("/entreprise/delete/{id}",name="entreprise_delete", methods={"DELETE"})
 */
public function delete(Entreprise $entreprise): Response { 
    // id dans l'url correspond à $entreprise passée en paramètre de la fonction delete

    if (!$entreprise) { throw $this->createNotFoundException('aucune entreprise pour id'); }

    $entityManager = $this->getDoctrine()->getManager(); 
    $entityManager->remove($entreprise); 
    $entityManager->flush(); 
    $this->addFlash('success', 'Success delete');

    return $this->redirectToRoute('admin'); 
}

Il me semble que l'erreur vient d'un autre fichier non ? Symfony doit te donner le fichier et la ligne normalement.
Attention aussi à la virgule à la fin de l'annotation @Route qui peut poser problème

mary_25
Auteur

Bonjour Victor,

j'ai enlevé la virgule , mais j'ai toujours le même problème.

Il me met ceci en dessous du message d'erreur :

in \vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php (line 1789)

Salut,

Ton entreprise doit avoir des relations avec d'autres entity et elle doit avoir des enregistrements en base de données.

Du coup tu ne peux pas juste supprimer l'entreprise car cela briserai les relations existantes.
Dans le principe, on dit que tout ce sui entre dans une base de données n'en sort jamais ...

Donc une solution serait de rendre l'entreprise non disponible via l'ajout d'une variable type "Status" avec un boolean.

Puis tu modifies tes requetes pour ne faire apparaitre QUE les entreprise dont les status est égale à 1.
Au pire, si tu veux ne pas concerver les données, éfface les données nominatives et ne garde QUE l'ID, comme ça tu gardes les relations existantes et tu n'as plus de données à afficher.

mary_25
Auteur

Salut Bidule

Mon entreprise est vide il n'y a absoulment rien dedans c'est une entreprise test

Essai comme ça

/**
 * @Route("/entreprise/delete/{id}",name="entreprise_delete", methods={"DELETE"})
 */

public function delete( Entreprise $Entreprise): Response
{
    $entityManager = $this->getDoctrine()->getManager();

    if (!$entityManager->getRepository(Entreprise::class)->find($Entreprise)) {
        throw $this->createNotFoundException('aucune entreprise pour id');
    }

    $entityManager->remove($Entreprise);

    $entityManager->flush();

    $this->addFlash('success', 'Success delete');

    return $this->redirectToRoute('admin');

}.
mary_25
Auteur

J'ai ce message d'erreur :

No route found for "GET /entreprise/delete/22": Method Not Allowed (Allow: DELETE)

Essai sans la methods "DELETE" dans ta route

/**

  • @Route("/entreprise/delete/{id}",name="entreprise_delete")
    */
mary_25
Auteur

J'ai rejouté le "GET" mais j'ai le même message d'erreur qu'avant : Notice: Undefined index: entreprise

mary_25
Auteur

J'ai essayé en enlevant le " delete " mais toujours le même message d'erreur

Oui, dans ce que j'ai t'ai envoyé à aucun moment je ne donne l'id envoyé à entity ...

/**
* @Route("/entreprise/delete/{id}",name="entreprise_delete", methods={"DELETE"})
*/
public function delete(Request $request): Response
{
    $entityManager = $this->getDoctrine()->getManager();

    $myEntreprise = $entityManager->getRepository(Entreprise::class)->find($request->get('id'));

    dd($myEntreprise); //bloque le script et affiche le dump de la recherche pour vérifier que l'entreprise est bien trouvée. A supprimer si cela fonctionne.

    if (!$myEntreprise) {
        throw $this->createNotFoundException('aucune entreprise pour id');
    }

    $entityManager->remove($myEntreprise);

    $entityManager->flush();

    $this->addFlash('success', 'Success delete');

    return $this->redirectToRoute('admin');

}
mary_25
Auteur

SoftrhController.php on line 255:
Entreprise {#1225 ▼
-id: 22
-logo: "6000016ccebae.png"
-nomEntreprise: "Entreprise 3"
-adresse: "1 rue de la tulipe"
-codePostal: "39100"
-ville: "Dole"
-dateCreation: "13/05/2020"
-numeroSiret: "1234567890"
-users: PersistentCollection {#1227 ▶}
-fichierEntreprises: PersistentCollection {#1260 ▶}
-fichierConventions: PersistentCollection {#1293 ▶}
-fichierReglements: PersistentCollection {#1326 ▶}
-fichierAccords: PersistentCollection {#1359 ▶}
-fichierOrganigrammes: PersistentCollection {#1392 ▶}
-plannings: PersistentCollection {#1450 ▶}
-compteRenduCses: PersistentCollection {#1483 ▶}
-docFilActus: PersistentCollection {#1516 ▶}
-planningSalaries: PersistentCollection {#1549 ▶}
}

Donc là, le dump confirme que tu as bien trouvé l'entreprise dont tu passes l'id

commente la ligne et relance normalement cela devrait passer

mary_25
Auteur

j'ai commenté et encore ce message d'erreur : Notice: Undefined index: entreprise

mary_25
Auteur

Mon entreprise est lié a d'autres entity , ça ne serait pas ça le problème?

Si c'est ce que j'ai dis des le début ;)
du coup il faut soit faire des suppressions en casacde afin de supprimer tous les enregistrements qui sont liés à ton entreprise au risque de perdre des données, soit ajouter un Status "Actif" au niveau de ton entity Entreprise, afin de ne plus permettre l'affichage de cette entreprise tout en gardant les données cohérentes dans ta base de données.

mary_25
Auteur

oui mais mon entreprise est vide j'ai pas rentré de donnée lié a l'entreprise ^^

mary_25
Auteur

Comment tu fais le status actif ?

C'est juste une variable dans ton entity Entreprise 'Status' par exemple avec un type boolean.

Après il faut créer des requetes dans ton Repository afin de ne chercher que les entreprise ayant un status True (actif).

Il faudra faire la même chose dans tes formulaires en ajoutant une petite recherche dans tes listes déroulante.

Exemple d'une liste déroulante avec une requete n'affichant que les canaux de contact "actif" (dans mon cas)

->add('canalContact',EntityType::class, [
            'class' => CanalDemandes::class,
            'choice_label' => 'NomCanal',
            'placeholder' => 'Canal de contact',
            'query_builder' => function(EntityRepository $er){
                return $er->createQueryBuilder('c')
                    ->andWhere('c.Actif = true')
                    ;
            }
        ])
mary_25
Auteur

D'accord je vais regarder ça

Merci pour ton temps c'est cool

tu devrais aussi vérifier la validité d'un token avant de supprimer ton entité et dans ce cas tu dois passer l'objet Request aussi dans ta méthode delete

function delete(Request $request, Entreprise $entreprise) {
...
mary_25
Auteur

jameskougarr merci beaucoup pour ton aide