2016-12-17 4 views
0

Добро пожаловать! Я новичок в laravel, и у меня проблемы. Я запускаю свой частный проект и хочу удалить запрос из базы данных с помощью кнопки удаления (простое приложение todo). Когда я нажимаю на него, он не удаляет, а перенаправляет меня только на id этого запроса. Не знаю, что делать. Кто-нибудь может мне помочь?Laravel - кнопка удаления

С уважением tomczas

Уничтожить функцию в HomeController

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

} 

домой лезвие

@foreach($todos as $todo) 
      <ul class="todo-list"> 
      <li> 
       <!-- drag handle --> 
        <span class="handle"> 
        <i class="fa fa-ellipsis-v"></i> 
        <i class="fa fa-ellipsis-v"></i> 
        </span> 
       <!-- checkbox --> 
       <input type="checkbox" value=""> 
       <!-- todo text --> 
       <span class="text">{{$todo->tytul}}</span> 
       <!-- Emphasis label --> 
       <small class="label label-danger"><i class="fa fa-clock-o"></i> {{$todo->czas}}</small> 
       <!-- General tools such as edit or delete--> 
       <div class="tools"> 
       <i class="fa fa-edit"></i> 
       {{Form::open([ 'method' => 'DELETE', 'route' => [ 'home.destroy', $todo ] ])}} 
           {{ Form::hidden('id', $todo->id) }} 
           {{Form::button('<i class="fa fa-trash-o"></i>', array('type' => 'submit', 'class' => ''))}} 
          {{ Form::close() }} 
       <i class="fa fa-trash-o"></i> 
       </div> 
      </li> 

      </ul> 
      @endforeach 

ответ

1

Закрепить форму:

{{Form::open(['method' => 'DELETE', 'route' => ['home.destroy', $todo->id]])}} 

и нет необходимости ф или:

{{ Form::hidden('id', $todo->id) }} 

... Laravel делает все Магического

P.S. убедитесь, что вы создали маршрут ресурса, чтобы домашний контроллер работал как контроллер REST.

экстра, смотреть это видео: https://www.youtube.com/watch?v=6pjPXOwKzJM


еще один способ сделать функцию удаления в том, что - Вы можете создать некоторый маршрут:

Route::get('home/{id}/delete', ['uses' => '[email protected]', 'as' => 'home.delete']); 

и в этом случае нет необходимости в форме:

<div class="tools"> 
    <i class="fa fa-edit"></i> 
    <a href="{{route('home.delete', $todo->id)}}?{{time()}}"> 
    <i class="fa fa-trash-o"></i> 
    </a>   
</div> 



ps после прочтения ваших маршрутов я вижу также основную проблему:

Route::resource('home', '[email protected]'); 

должно быть (читать this):

Route::resource('home', 'HomeController'); 
+0

У меня есть этот маршрут :: ресурс ('home', 'HomeController @ index'); и он по-прежнему перенаправляет меня на http: // mypath/1 где 1 - это задача ID, которую я хочу удалить. – tomczas

+0

@tomczas Я обновил свой ответ. Таким образом, я не зависим от «магии» фреймворков, и я четко определяю свои маршруты и использую «другой способ» в моем ответе. – num8er

+0

NotFoundHttpException в строке RouteCollection.php 161: – tomczas

0

Ok вторая идея работает большой, но небольшая ошибка в написании:

должно быть:

Route::get('/home/{id}/delete', ['uses' => '[email protected]', 'as' => 'home.delete']); 

так {id} не :id и uses не use Большое спасибо за помощь!

+0

Я исправил это в своем ответе (: Я не использую LV так много в прошлом году, поэтому забыл, как установить '{id}' и ': id' is from expressjs (; – num8er

+1

Но еще раз спасибо! – tomczas

+0

удачи. – num8er

Смежные вопросы