2016-12-18 3 views
-1

мой взгляд, как это:Как решить методNotAllowedHttpException в строке RouteCollection.php 218 :?

@foreach($users as $user) 
    <tr> 
     <td>{!! $user->id !!}</td> 
     <td>{!! $user->username !!}</td> 
     <td>{!! $user->phone !!}</td> 
     <td>{!! $user->address !!}</td> 
     <td> 
      {!! Form::open(['route' => ['users.destroy.year', $user->id, $year], 'method' => 'delete']) !!} 
      <div class='btn-group'> 
       <a href="{!! route('users.edit', [$user->id]) !!}" class='btn btn-default btn-xs'><i class="glyphicon glyphicon-edit"></i></a> 
       {!! Form::button('<i class="glyphicon glyphicon-trash"></i>', ['type' => 'submit', 'class' => 'btn btn-danger btn-xs', 'onclick' => "return confirm('Are you sure?')"]) !!} 
      </div> 
      {!! Form::close() !!} 
     </td> 
    </tr> 
@endforeach 

Мои маршруты \ web.php как это:

Route::get('users/destroy/{year}', '[email protected]')->name('users.destroy.year'); 

Route::resource('users', 'UserController'); 

Мой контроллер выглядит так:

public function destroy($id, $year) 
{ 
    $user = $this->userRepository->findWithoutFail($id); 

    if (empty($user)) { 
     Flash::error('User not found'); 

     return redirect(route('users.index.year', ['year' => $year])); 
    } 

    $this->userRepository->delete($id); 

    Flash::success('User deleted successfully.'); 

    return redirect(route('users.index.year', ['year' => $year])); 
} 

Существует существует ошибка, как это:

MethodNotAllowedHttpException in RouteCollection.php line 218: 

И URL выглядит следующим образом: http://localhost/mysystem/public/users/2?2016

При нажатии кнопки удалить, я хочу, чтобы URL выглядит следующим образом: http://localhost/mysystem/public/users/index/2016

Есть ли люди, которые могут мне помочь?

ответ

3

По вашему мнению вы объявивший метод формы как DELETE; но в файле routes\web.php, вы объявили маршрута как GET

Изменить вид

{!! Form::open(
    ['route' => ['users.destroy.year', $user->id, $year], 
    'method' => 'get'] 
)!!} 

Ваш routes/web.php должен выглядеть так,

Route::get('users/index/{year}', '[email protected]') 
    ->name('users.index.year'); 
Route::get('users/destroy/{id}/{year}', '[email protected]') 
    ->name('users.destroy.year'); 
Route::resource('users', 'UserController', ['except' => ['index', 'destroy']]); 

свой код контроллера, как это.

Это должно сделать трюк.


Просто предложение

Это лучше не держать удалить операцию по GET запросу. Таким образом изменить DELETE маршрут как так

Route::delete('users/destroy/{id}/{year}', '[email protected]') 
    ->name('users.destroy.year'); 

Изменить вид

{!! Form::open(
    ['route' => ['users.destroy.year', $user->id, $year], 
    'method' => 'delete'] 
)!!} 
+0

Я использую http://labs.infyom.com/laravelgenerator/ или https://github.com/InfyOmLabs/adminlte-generator/tree/5.3. Кажется, что удаление было создано автоматически. Поэтому нет необходимости добавлять маршруты. –

+0

Правильно. У вас уже есть этот ресурс Route :: ('users', 'UserController'); '; который добавит маршрут 'delete'. Я уточню свой ответ. – linuxartisan

+0

При нажатии кнопки delete, я хочу, чтобы URL-адрес был здесь: http: // localhost/mysystem/public/users/index/2016. Как, если вы не объявили маршрут «GET»? –

2

HTML-формы не поддерживают действия PUT, PATCH или DELETE. Таким образом, при определении маршрутов PUT, PATCH или DELETE, вызываемых из HTML-формы, вам нужно будет добавить в форму скрытое поле _method. Значение, отправленное с _method поля будет использоваться в качестве метода запроса HTTP:

<form action="/foo/bar" method="POST"> 
    <input type="hidden" name="_method" value="DELETE"> 
    <input type="hidden" name="_token" value="{{ csrf_token() }}"> 
</form> 
+0

Нет необходимости в этом, так как OP использует '{!! Форма :: открытая ...' – linuxartisan

+0

@ Xiaobing Mi, Кажется, проблемы нет –

0

id не объявлен в пути и может быть это является причиной, Меняем вам маршрут:

Route::get('users/destroy/{year}', '[email protected]')->name('users.destroy.year'); 

к настоящему времени

Route::get('users/destroy/{id}/{year}', '[email protected]')->name('users.destroy.year'); 

Надеюсь, что это решит эту проблему.

+0

Существует такая ошибка: 'MethodNotAllowedHttpException в строке RouteCollection.php 218:' и url выглядит так: 'http: // localhost/mysystem/public/users/destroy/6/2016'. Я хочу, чтобы URL-адрес выглядел так: 'http: // localhost/mysystem/public/users/index/2016' –

+0

Итак, он не работает –

+0

Хорошо, давайте протестировать и решить ... –