Сохраненные данные не уничтожаются - PullRequest
0 голосов
/ 06 апреля 2019

Я использовал ресурс для генерации маршрутов.

Маршрут:

Route::resource('/','TodoController');

Я пытаюсь удалить задачу, хранящуюся в моей базе данных.

Код вида:

<form action="{{ route('destroy',['$todo->id']) }}" method="POST">
    @csrf
    {{ method_field('delete') }}
    <button type="button" class="btn btn-primary">Yes</button>
    <input type="hidden" name="_method" value="DELETE">
</form>

И, код контроллера:

public function destroy(Todo $todo)
{
    $todo->Todo::find($id);
    $todo->delete();

    return redirect()->route('index');
}

Мне не удалось удалить сохраненную задачу по нажатию кнопки. Что я делаю не так?

Ответы [ 4 ]

0 голосов
/ 06 апреля 2019

Измените свой маршрут на:

Route::resource('todos','TodoController');

Таким образом, laravel объявит все маршруты, которые вам нужны для TodoController.

В теге кнопки необходимо указать «отправить» в атрибуте типа. И вам нужно передать идентификатор в качестве параметра в методе маршрута. Измените свою форму на:

<form action="{{ route('destroy', $todo->id) }}" method="POST">
    @csrf
    @method('DELETE')
    <button type="submit" class="btn btn-primary">Yes</button>
</form>

Ваш контроллер:

public function destroy(Todo $todo, $id)
{
    $todo = Todo::findOrFail($id);
    $todo->delete();

    return redirect()->route('index');
}
0 голосов
/ 06 апреля 2019

Я думаю, что ваши маршруты не регистрируются правильно.Я бы зарегистрировал ресурс todo как:

Route::resource('todos', 'TodoController');

Затем в вашей форме укажите действие уничтожения по имени маршрута:

<form action="{{ route('todos.destroy', ['todo' => $todo->id]) }}" method="POST">
    @csrf
    @method('DELETE')
    <button type="submit" class="btn btn-primary">Yes</button>
</form>

Наконец, в вашем контроллере у вас уже есть экземпляр Todoмодель, поэтому вам не нужно вручную вызывать метод поиска.

public function destroy(Todo $todo)
{
    $todo->delete();
    return redirect()->route('index');
}
0 голосов
/ 06 апреля 2019

Попробуйте с этим

<form action="{{ route('destroy', '$todo->id') }}" method="POST">
    @csrf
    @method('DELETE')
    <button type="button" class="btn btn-primary">Yes</button>
    <input type="hidden" name="_method" value="DELETE">
</form>

В вашем методе контроллера это должно быть так,

public function destroy($id)
{
    $todo = Todo::findOrFail($id);
    $todo->delete();

    return redirect()->route('index');
}

Здесь вы должны сохранить результат запроса в переменной и выполнить с ним некоторые действия,Это то же самое, что и метод save() и update().

Надеюсь, это поможет:)

0 голосов
/ 06 апреля 2019

Измените свою функцию контроллера следующим образом:

 public function destroy($id)
 {
        //
        $todo->Todo::find($id);
        $todo->delete();
        return redirect()->route('index');
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...