2014-11-29 3 views
0

Я новичок в Laravel, и я пытаюсь вызвать функцию destroy в контроллере, передавая два параметра, но получаю ошибку: исключение отсутствует аргумент 2 для GradoController: : уничтожить().laravel Ошибка Exception Отсутствует аргумент 2 для Controller :: destroy()

У меня есть оценки от 1 (сначала) до 6 (шестого), и у каждого есть предметы, связанные с ним. Оценки перечислены на странице в закладках, и, щелкнув вкладку, вы получите список предметов, которые идут со степенью. Я помещаю кнопку удаления рядом с каждым предметом, чтобы пользователь мог щелкнуть удаление и отсоединить объект от оценки.

Я пытаюсь передать как gradeId и subjectId методу уничтожения в GradoController

мой взгляд файл index.blade.php: уничтожить функция

<html> 
<head> 

{{HTML::script('assets/js/jquery-1.11.1.js'); }} 
{{HTML::script('assets/js/jquery-ui.js'); }} 
{{HTML::script('assets/js/jquery-ui.min.js'); }} 
{{HTML::style('assets/css/jquery-ui.min.css'); }} 

    <script> 
    $(function() { 
    $('#tabs').tabs(); 
    }); 
    </script> 
</head> 


<body> 
<h1>Lista Materias por Grado</h1> 
<?php 
    $year = date("Y"); 
    $month = date("m"); 
    if($month < 8){ 
     $year = $year - 1; 
    } ?> 
<h2>{{$year}}-{{$year+1}}</h2> 

<div id="tabs"> 
<ul> <?php $i=1; ?> 
    @foreach($grados as $grado) 
    <li><a href="#tabs-{{$i}}">Grado:{{ $grado->name_grados}} </a></li> 
    <?php $i++; ?> 
    @endforeach 
    </ul> 
    <?php $i = 1; ?> 
    @foreach($grados as $grado) 
    <div id="tabs-{{$i}}" > 
      @if($grado->subject->count()) 
      @foreach($grado->subject as $subject) 
      <li> {{ $subject->name_subjects }} 


     {{Form::open(array('method' => 'DELETE', 'route' => array('grados.destroy', $grado->id_grados, $subject->id_subjects))) }} 


      {{ Form::submit('Delete',array('class' => 'btn btn-danger')) }} 
    </li> 
     @endforeach 
      @else 
      No hay materias asociadas 
     @endif 
      </br></br> 
       {{ link_to_route('grados.edit', 'Agregar Materias', 
array($grado->id_grados), array('class' => 'btn btn-info')) }} 
      <?php $i++; ?> 
    </div> 
@endforeach 
</div> 

Мои GradoController в:

public function destroy($gradoId, $subjectId) 
{   

     $grado = Grado::find($gradoId); 
     $year = 2014;   
     $grado->subject()->detach($subjectId, array('year_grado_subject'=>$year)); 


     return Redirect::route('grados.index');     
} 

В маршрутах, которые я имею:

Route::get('grados/{id_grados}/{id_subjects}/destroy', '[email protected]'); 
Route::resource('grados', 'GradoController'); 

Спасибо!

+0

$ субъектно> id_subjects есть поле в базе данных под названием id_subjects? Или это id_subject – Rafael

+0

Да, это называется id_subjects. – maeve

ответ

0

То, что я могу себе представить, что форма использует действие через

Route::resource('grados', 'GradoController');

и «по умолчанию УДАЛИТЬ» (см http://laravel.com/docs/4.2/controllers#restful-resource-controllers) использует только один параметр (/ Grados/{параметр}), так что второй параметр теряется и не передается на действие контроллера. Это происходит потому, что нет установленного маршрута на

Route::get('grados/{id_grados}/{id_subjects}/destroy','[email protected]');

И он не использует маршрут :: удалить, а маршрут :: получить. Так изменяя его

Route::delete('grados/{id_grados}/{id_subjects}/destroy',['as' => 'grados.destroy', 'uses' => '[email protected]']);

надеюсь, будет делать трюк. Плюс я бы не стал определять одни и те же маршруты дважды. Например. Вы можете использовать это:

Route::resource('grados', 'GradoController', array('except' => array('destroy')));

+0

Большое спасибо за ваш ответ. Похоже, теперь он находит функцию с параметрами, поскольку она перенаправляет на: http: // localhost/laravel/grados/{gradoId}/{subjectID}/destroy, но теперь это дает мне MethodNotAllowedHttpException. Как я могу это исправить. – maeve

+0

Хорошо, я изменил маршрут :: get to Route :: delete, и он больше не дает исключения, но теперь предметы удаляются в последовательном порядке по идентификатору (самый низкий идентификатор первого), независимо от того, какую кнопку удаления я нажимаю, но Полагаю, это вопрос для другого поста. Спасибо за ваши предложения, я долго задерживался, и они продвинули меня вперед! – maeve

+0

А, ну, это должно быть Route :: delete, будет обновлять ответ –

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