J'ai 2 entités reliée entre elle Techno et Image. Dans le formulaire d'edit, j'affiche les images uploader avec à côté un lien supprimer qui appelle la fonction deleteImage dans mon controller.
admin.yaml : (désolé YAML n'était pas présent dans la liste je ne savais pas quoi mettre comme extension)
public function deleteImage(EntityManagerInterface $manager, Request $request, Image $image, ImageService $imageService): JsonResponse
{
$data = json_decode($request->getContent(), true);
if ($this->isCsrfTokenValid('delete' . $image->getId(), $data['_token'])) {
// Le token csrf est valide
// On récupère le nom de l'iamage
$name = $image->getName();
if ($imageService->delete($name, 'technos', 300, 300)) {
$manager->remove($image);
$manager->flush();
return new JsonResponse(['success' => true], 200);
}
// La suppression a échoué
return new JsonResponse(['error' => 'Erreur de suppression'], 400);
}
return new JsonResponse(['error' => 'Token invalide'], 400);
}
J'ai suivis un tuto pour réaliser ceci et pour lui tout fonctionne, cependant il utilise le routing dans le controller, mais même en passant moi aussi par le controller, j'ai la même erreur. Je précise également que je n'utilise jamais method dans mes autres routes.
Quand tu accedes a un(ou une?) url en cliquant dessus la methode c'est GET. Si tu veux y acceder en DELETE tu devras faire une requete http et chosir comme methode DELETE
Si vraiment tu souhaites utiliser DELETE, l'autre possibilité serait de faire du lien un formulaire avec un champ caché avec pour name_method et dont la valeur est DELETE — il n'y a pas moyen de mettre ce verbe dans l'attribut method du formulaire qui doit du coup être POST, la majorité sinon la totalité des navigateurs ne reconnaissent que deux valeurs pour cet attribut.
Il me semble aussi qu'il y a aussi un paramètre à activer pour pouvoir ainsi "surcharger" la méthode utilisée par le navigateur (c'est Symfony qui va gérer).
@Ymox et c'est dans ces moment qu'on se sent bête, j'avais aussi le fichier mais j'ai oublier de yarn watch du coup il était pas pris en compte, merci de ton aide
EN effet comme l'a bien dit @Ymox le verbe DELETE n'est pas souvent supporté par les navigateurs pour pouvoir le simuler il faut faire par exemple ceci :
Notre action du controller
#[Route('/{id}', name: 'app_book_delete', methods: ['DELETE'])]
public function delete(Request $request, Book $book, EntityManagerInterface $entityManager): Response
{
$entityManager->remove($book);
$entityManager->flush();
}
Le message qui suit est une réponse automatique activée par un membre de l'équipe de modération. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention. Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé. Pour plus d'informations, nous vous invitons à lire les règles générales du forum
Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.
Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre. En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.
Au lieu de déterrer un sujet il est préférable :
soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
soit de créer un nouveau sujet décrivant votre propre contexte
ne pas répondre à un déterrage et le signaler à la modération
Pas d'aide concernant le code par MP, le forum est là pour ça :)
Pas d'aide concernant le code par MP, le forum est là pour ça :)