Autour de Laravel

Supprimer ligne database

Avatar de PlySoft
PlySoft

Bonjour à tous, Je souhaite supprimer un enregistrement de ma base. Mon enregistrement se passe nickel, mais delete ...

Mon web.php :

Route::delete('/photos/delete/{$article}', [ArticleController::class, 'delete'])
->middleware('auth', 'verified')
->name('photos.delete');

Mon blade.php

                 <form action="{{ route('photos.delete', $article->id) }} method="POST" >
                     @csrf
                     @method("DELETE")
                    <button type="submit" class="bg-red-500 rounded-full cursor-pointer">Delete</button>               
                </form> 

Mon controleur ArticleController

    public function delete(Article $article)
    {
           
         dd($article);

    return redirect(route('photos.mesphotos'))->withSuccess(__('Post delete successfully.'))

et j'obtiens un "beau" 404 avec l'adresse : http://127.0.0.1:8000/photos/delete/50%20method=?_token=A*********** / Le 50 est bien l'id de la donnée à supprimer.

J'avoue ne pas comprendre. Certaines fois, c'est quand nous avons le nez dessus ( un peu trop près et un peu trop longtemps) que nous ne voyons pas l'erreur .

Merci de votre aide Plysoft

Posté il y a 1 mois
Avatar de CinquièmeDimension
CinquièmeDimension

Salut,

Est-ce que, par hasard, il ne maquerait pas un guillemet dans :

<form action="{{ route('photos.delete', $article->id) }} method="POST" >

Ton action est ouverte mais pas fermée

Posté il y a 1 mois
Avatar de PlySoft
PlySoft

Bonjour, Merci , c'est en effet un des soucis. maintenant j'ai un 404 plus clair . mais je l'ai toujours.... http://127.0.0.1:8000/photos/mesphotos/delete/50

Mon route:list pour info. DELETE | photos/mesphotos/delete/{$article} | photos.delete | App\Http\Controllers\ArticleController@delete | web | App\Http\Middleware\Authenticate | Illuminate\Auth\Middleware\EnsureEmailIsVerified |

Je poursuis mes recherches ..

Posté il y a 1 mois
Avatar de CinquièmeDimension
CinquièmeDimension

T'as essayé avec Postman ? Enlève les middlewares de ta route (pas obligé mais pour un simple test, c'est plus pratique) et teste ta route en Delete avec Postman.

Posté il y a 1 mois
Avatar de CinquièmeDimension
CinquièmeDimension

T'as essayé avec Postman ? Enlève les middlewares de ta route (pas obligé mais pour un simple test, c'est plus pratique) et teste ta route en Delete avec Postman.

Posté il y a 1 mois
Avatar de PlySoft
PlySoft

Bonjour, Je le fais , et te dis ce que cela donne. Merci A++

Posté il y a 1 mois
Avatar de PlySoft
PlySoft

Bonjour, Je le fais , et te dis ce que cela donne. Merci A++

Posté il y a 1 mois
Avatar de PlySoft
PlySoft

Je ne suis pas un expert de postman, mais voilà ce que j'obtiens. https://ibb.co/XFcGqQT

Il est vrai que chaque changement dans wep.php je suis contraint de faire un php artisan route:cache pour que cela le prenne en compte. C'est peut être une piste. histoire de cache?

Pour mémoire. Mon web.php allégé

    Route::delete('/photos/mesphotos/delete/{$article}', [ArticleController::class, 'delete'])
    ->name('photos.delete');

Mon blade

                        <form action="{{ route('photos.delete', $article->id) }}" method="POST">
                            @csrf
                            @method("DELETE")
                            <button type="submit" class="bg-red-500 rounded-full cursor-pointer">Delete</button>
                        </form>

Mon Controleur

    public function delete(Article $article)
    {
           
         dd($article);

         return redirect(route("photos.mesphotos"))->with('success','Photo supprimee.');
    }
Posté il y a 1 mois
Avatar de CinquièmeDimension
CinquièmeDimension

Il y a quelques erreurs dans ton test postman:

Donc dans postman tu refait pareil mais sans parametre juste avec l'url http://127.0.0.1:8000/photos/mesphotos/delete/50

Juste pour être sûr, ta route c'est Route::delete('/photos/mesphotos/delete/{$article}', [ArticleController::class, 'delete']) ou Route::delete('/photos/delete/{$article}', [ArticleController::class, 'delete' ]) ?

Dans le doute essaie les deux routes sur postman au cas où...

Tu parle des deux donc peut-être la cause du 404. En tout cas, oui le cache peut être en cause si t'as changé de route entre temps. Même si jamais jamais eu à flusher le cache pour un changement de route.

Dans ton .env t'es en APP_ENV=local ou autre ?

Posté il y a 1 mois
Avatar de PlySoft
PlySoft

Bonjour Merci beaucoup pour ton aide. Pour APP_ENV, je suis bien en local. Effectivement, à force de faire des tests, les routes évolues. Mais les essais postman sont identiques.

Mais j'avance ..... enfin presque.

Deux essais où j'arrive au controleur : 1° -------------- Le blade :

                        <form action="{{ route('photos.delete2', $article->id) }}" method="POST">
                            @csrf
                            @method("DELETE")
                            <button type="submit" class="bg-red-500 rounded-full cursor-pointer">Delete2</button>
                        </form>

avec la route

    Route::delete('/photos/mesphotos/delete2', [ArticleController::class, 'delete2'])->name('photos.delete2');

et un controleur

    public function delete2(Article $article)
    {
         dd($article->id);
         return redirect(route("photos.mesphotos"))->with('success','Photo supprimee.');
    }

donne l'url http://127.0.0.1:8000/photos/mesphotos/delete2?50 qui aboutit bien sur le dd($article->id); mais null. postman = 419 unknow status

2° -------------- le blade

                        <form action="{{ route('photos.delete3', $article) }}" method="POST">
                            @csrf
                            @method("DELETE")
                            <button type="submit" class="bg-red-500 rounded-full cursor-pointer">Delete3</button>
                        </form>

avec la route

    Route::delete('/photos/mesphotos/delete3', [ArticleController::class, 'delete3'])->name('photos.delete3');

et le controleur

    public function delete3(Article $article)
    {
         dd($article);
         return redirect(route("photos.mesphotos"))->with('success','Photo supprimee.');
    }

donne l'url http://127.0.0.1:8000/photos/mesphotos/delete3?50 qui aboutit bien sur le dd ci dessous (sans l'id) et postman = 419 unknow status

App\Models\Article {#390 ▼
  #fillable: array:6 [▼
    0 => "id"
    1 => "title"
    2 => "photo"
    3 => "content"
    4 => "user_id"
    5 => "voyage_id"
  ]
  #connection: null
  #table: null
  #primaryKey: "id"
  #keyType: "int"
  +incrementing: true
  #with: []
  #withCount: []
  +preventsLazyLoading: false
  #perPage: 15
  +exists: false
  +wasRecentlyCreated: false
  #attributes: []
  #original: []
  #changes: []
  #casts: []
  #classCastCache: []
  #dates: []
  #dateFormat: null
  #appends: []
  #dispatchesEvents: []
  #observables: []
  #relations: []
  #touches: []
  +timestamps: true
  #hidden: []
  #visible: []
  #guarded: array:1 [▼
    0 => "*"
  ]
}

Par avance, un grand Merci pour tes idées.

Posté il y a 1 mois
Avatar de CinquièmeDimension
CinquièmeDimension

Essaie la même chose mais avec cette route:

Route::delete('/photos/mesphotos/delete3/{article}', [ArticleController::class, 'delete3'])->name('photos.delete3');

Pour Postman le 419 c'est à cause du CSRF qu'il attends, c'est chiant.

Posté il y a 1 mois
Avatar de CinquièmeDimension
CinquièmeDimension

Essaie la même chose mais avec cette route:

Route::delete('/photos/mesphotos/delete3/{article}', [ArticleController::class, 'delete3'])->name('photos.delete3');

Pour Postman le 419 c'est à cause du CSRF qu'il attends, c'est chiant.

Posté il y a 1 mois
Avatar de CinquièmeDimension
CinquièmeDimension

Essaie la même chose mais avec cette route:

Route::delete('/photos/mesphotos/delete3/{article}', [ArticleController::class, 'delete3'])->name('photos.delete3');

Pour Postman le 419 c'est à cause du CSRF qu'il attends, c'est chiant.

Posté il y a 1 mois
Avatar de PlySoft
PlySoft

Merci beaucoup Cinquième Dimension. !

Je suis heureux de ne pas avoir balancé mon pc par la fenêtre. parce que des fois...c'est pas l'envie qui me manquait !

Posté il y a 1 mois

Vous ne pouvez pas répondre à ce sujet.