محمد حکمتی
4 سال پیش توسط محمد حکمتی مطرح شد
9 پاسخ

متد destroy لاراول

سلام وقت بخیر
قراره وقتی ادمین روی دکمه حذف یه کامنت کلیک میکنه اون کامنت پاک شه ولی کامنت پاک نمیشه و هیچ اروری نمیده!
روت

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

ریدایرکت میشه به صفحه بدون هیچ اروری!
مشکل از کجاست؟


ثبت پرسش جدید
سبحان دادخواه
تخصص : دانشجوی برنامه نویسی :)
@SobhanDadkhah 4 سال پیش مطرح شد
0

@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();
}

امیدوارم مشکلتون حل بشه


نوید
تخصص : برنامه نویس Go / Django
@navids 4 سال پیش آپدیت شد
0

من خیلی وقت دیگه لاراول کار نمیکنم
ولی گمونم وقتی از 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/'));
    }

سبحان دادخواه
تخصص : دانشجوی برنامه نویسی :)
@SobhanDadkhah 4 سال پیش آپدیت شد
0

@mohammad.hekmaty
باید همونطوری که دوستمون گفتن همون $comment که پیدا میشه متد destroy روش اجرا کنید.

همچنین طبق قوانین لاراول روت و درخواستتون از نوع DELETE بذارید .

@method('DELETE')
// --------------------------------------
Route::delete();

میلاد هدایت پور
تخصص : در حال پیشرفت
@miladparsi1070 4 سال پیش مطرح شد
0

به این شکل بنویسید:

Comment::find($id)->delete()

همچنین redirect رو هم اینجوری بنویسید بهتره:

 return Redirect::to('/admin/comments')

محمد حکمتی
تخصص : مثلا backend
@mohammad.hekmaty 4 سال پیش مطرح شد
0

@navids
@miladparsi1070
@SobhanDadkhah
ممنون ولی متاسفانه هیچکدوم از این روش ها جواب نداد .


سبحان دادخواه
تخصص : دانشجوی برنامه نویسی :)
@SobhanDadkhah 4 سال پیش مطرح شد
0

@mohammad.hekmaty اینجور مواقع پیشنهاد میکنم مرحله مرحله پیش برید . مثلا توی کنترلر ببینید میتونید دسترسی به کامنت داشته باشید ؟ با تابع dd دائما جاهای مختلف تست کنید . بعد متوجه میشید که مشکل چی هست . اصلا ارسال میشه پارامتر یا خیر . دسترسی دارید به دیتابیس یا خیر و ...


محمد حکمتی
تخصص : مثلا backend
@mohammad.hekmaty 4 سال پیش مطرح شد
0

@SobhanDadkhah مشکل از کنترلره


سبحان دادخواه
تخصص : دانشجوی برنامه نویسی :)
@SobhanDadkhah 4 سال پیش مطرح شد
0

@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();
}

امیدوارم مشکلتون حل بشه


محمد حکمتی
تخصص : مثلا backend
@mohammad.hekmaty 4 سال پیش مطرح شد
1

@SobhanDadkhah
دست شما درد نکنه درست شد


سبحان دادخواه
تخصص : دانشجوی برنامه نویسی :)
@SobhanDadkhah 4 سال پیش آپدیت شد
0

@mohammad.hekmaty خواهش میکنم . موفق باشید


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام