سلام وقت بخیر
قراره وقتی ادمین روی دکمه حذف یه کامنت کلیک میکنه اون کامنت پاک شه ولی کامنت پاک نمیشه و هیچ اروری نمیده!
روت
Route::post("/comments/{id}/destroy" , 'Admin\CommentController@destroy')->name('CommentDelete');
کنترلر
public function destroy(Comment $comment , $id)
{
Comment::destroy($id);
return redirect(url('http://127.0.0.1:8000/admin/comments/'));
}
ویو
@foreach( $comments as $comment)
<div class="d-flex justify-content-center align-items-center p-2">
@if($comment->status == 'unaccepted')
<form method="post" class="card card-body m-2 p-2 bg-danger" action="{{route('CommentDelete' , "id" , $comment->id)}}">
@method('POST')
@csrf
{{$comment->text}}
<button type="submit" class="btn btn-warning" style="max-width: 15%;">حذف</button>
</form>
@endif
@if($comment->status == 'accepted')
<form method="post" class="card card-body m-2 p-2 bg-success" action="{{route('CommentDelete' , "id" , $comment->id)}}">
@method('POST')
@csrf
{{$comment->text}}
<button type="submit" class="btn btn-warning" style="max-width: 15%;">حذف</button>
</form>
@endif
</div>
@endforeach
ریدایرکت میشه به صفحه بدون هیچ اروری!
مشکل از کجاست؟
@mohammad.hekmaty مثلا یک متن تست برگردونید داخل متد Destroy ببینید اصلا درخواست میرسه به کنترلر ؟ فرضا
public function destroy()
{
dd('My Destroy Method');
}
من حس میکنم مشکل از ارسال پارامترتون هست به کنترلر. فرم مربوط به دلیت رو به این صورت تغییر بدید :
<form method="post" class="card card-body m-2 p-2 bg-danger"
action="{{route('CommentDelete' , $comment->id)}}">
@method('DELETE')
@csrf
{{$comment->text}}
<button type="submit" class="btn btn-warning" style="max-width: 15%;">حذف</button>
</form>
روت خودتون رو هم به اینصورت تغییر بدید
Route::delete("/comments/{id}/destroy" , 'Admin\CommentController@destroy')->name('CommentDelete');
بعد که موفق شدید به کنترلر برسید همون آیدی که دارید برای روت ارسال میکنید رو دریافت کنید و کامنت مربوطه رو پیدا کنید بعد حذفش کنید .
public function destroy($id)
{
$comment = Comment::findOrFail($id);
$comment->delete();
}
امیدوارم مشکلتون حل بشه
من خیلی وقت دیگه لاراول کار نمیکنم
ولی گمونم وقتی از route model binding استفاده میکنید نیازی نیست به این شکل عمل کنید
فقط
Route::post("/comments/{comment}/destroy" , 'Admin\CommentController@destroy')->name('CommentDelete');
و
public function destroy(Comment $comment )
{
$comment->destroy()
return redirect(url('http://127.0.0.1:8000/admin/comments/'));
}
@mohammad.hekmaty
باید همونطوری که دوستمون گفتن همون $comment که پیدا میشه متد destroy روش اجرا کنید.
همچنین طبق قوانین لاراول روت و درخواستتون از نوع DELETE بذارید .
@method('DELETE')
// --------------------------------------
Route::delete();
به این شکل بنویسید:
Comment::find($id)->delete()
همچنین redirect رو هم اینجوری بنویسید بهتره:
return Redirect::to('/admin/comments')
@navids
@miladparsi1070
@SobhanDadkhah
ممنون ولی متاسفانه هیچکدوم از این روش ها جواب نداد .
@mohammad.hekmaty اینجور مواقع پیشنهاد میکنم مرحله مرحله پیش برید . مثلا توی کنترلر ببینید میتونید دسترسی به کامنت داشته باشید ؟ با تابع dd دائما جاهای مختلف تست کنید . بعد متوجه میشید که مشکل چی هست . اصلا ارسال میشه پارامتر یا خیر . دسترسی دارید به دیتابیس یا خیر و ...
@mohammad.hekmaty مثلا یک متن تست برگردونید داخل متد Destroy ببینید اصلا درخواست میرسه به کنترلر ؟ فرضا
public function destroy()
{
dd('My Destroy Method');
}
من حس میکنم مشکل از ارسال پارامترتون هست به کنترلر. فرم مربوط به دلیت رو به این صورت تغییر بدید :
<form method="post" class="card card-body m-2 p-2 bg-danger"
action="{{route('CommentDelete' , $comment->id)}}">
@method('DELETE')
@csrf
{{$comment->text}}
<button type="submit" class="btn btn-warning" style="max-width: 15%;">حذف</button>
</form>
روت خودتون رو هم به اینصورت تغییر بدید
Route::delete("/comments/{id}/destroy" , 'Admin\CommentController@destroy')->name('CommentDelete');
بعد که موفق شدید به کنترلر برسید همون آیدی که دارید برای روت ارسال میکنید رو دریافت کنید و کامنت مربوطه رو پیدا کنید بعد حذفش کنید .
public function destroy($id)
{
$comment = Comment::findOrFail($id);
$comment->delete();
}
امیدوارم مشکلتون حل بشه
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟