Bonjour,
Je rencontre un petit problème avec mon code.
Pouvez-vous m'aider svp ? merci d'avance
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>
je cherche à supprimer mon entreprise
Notice: Undefined index: entreprise
/**
* @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
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.
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');
}.
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
/**
J'ai rejouté le "GET" mais j'ai le même message d'erreur qu'avant : Notice: Undefined index: entreprise
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');
}
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
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.
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')
;
}
])
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) {
...