Delete entreprise

Par mary_25, il y a 5 ans


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

VictorWeiss, il y a 5 ans

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, il y a 5 ans

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)

bidule, il y a 5 ans

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, il y a 5 ans

Salut Bidule

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

bidule, il y a 5 ans

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, il y a 5 ans

J'ai ce message d'erreur :

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

bidule, il y a 5 ans

Essai sans la methods "DELETE" dans ta route

/**

  • @Route("/entreprise/delete/{id}",name="entreprise_delete")
    */
mary_25, il y a 5 ans

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

mary_25, il y a 5 ans

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

bidule, il y a 5 ans

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, il y a 5 ans

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 ▶}
}

bidule, il y a 5 ans

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, il y a 5 ans

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

mary_25, il y a 5 ans

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

bidule, il y a 5 ans

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, il y a 5 ans

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

mary_25, il y a 5 ans

Comment tu fais le status actif ?

bidule, il y a 5 ans

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, il y a 5 ans

D'accord je vais regarder ça

Merci pour ton temps c'est cool

Murphy-NZL, il y a 5 ans
/** * @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'); }
Murphy-NZL, il y a 5 ans

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, il y a 5 ans

jameskougarr merci beaucoup pour ton aide