在Firefox和Laravel中删除http方法的问题

时间:2018-09-29 08:38:53

标签: laravel laravel-5 http-delete

嗨,我在Laravel中遇到问题。 我在Laravel中有一个项目,而在Firefox中却遇到了问题。在Chrome中,一切正常。 我有这个管理员视图

@foreach ($messages as $message)
    <tr>
      <td>
      <a href="{{ route('messages.show', $message->id) }}">
        {{ $message->id }}
      </a>
      </td>
      <td>{{ $message->nombre }}</td>
      <td>{{ $message->email }}</td>
      <td>{{ $message->mensaje }}</td>
      <td>
        <a class="btn btn-primary" href="{{ route('messages.edit',$message->id) }}">Editar</a>

        <form style="display:inline" action="{{ route('messages.destroy', $message->id)}} " method="post">
          {!! csrf_field() !!}
          {!! method_field('DELETE') !!}
          <button type="submit" class="btn btn-danger" name="button">Eliminar</button>
        </form>
      </td>
    </tr>

  @endforeach

我有一个带有两个按钮的表格,第二个按钮是删除邮件的表格。 O已添加method_field('DELETE')

这是我的路线。

Route::get('mensajes', 'MessagesController@index')->name('messages.index');
Route::get('mensajes/create', 'MessagesController@create')->name('messages.create');
Route::post('mensajes', 'MessagesController@store')->name('messages.store');
Route::get('mensajes/{id}', 'MessagesController@show')->name('messages.show');
Route::get('mensajes/{id}/edit', 'MessagesController@edit')->name('messages.edit');
Route::put('mensajes/{id}', 'MessagesController@update')->name('messages.update');
Route::delete('mensajes/{id}', 'MessagesController@destroy')->name('messages.destroy');

这里是MessagesController的destroy方法

public function destroy($id)
{
    //borro el mensaje
    //DB::table('messages')->where('id', $id)->delete();
    Message::findOrFail($id)->delete();

    //redirecciono
    return redirect()->route('messages.index');
}

在Chrome中,一切正常,消息已删除。但是在Firefox中,它重定向到/ mensajes / {id}路由,并显示消息。似乎在Firefox {!! method_field('DELETE')!!}无法正常工作。 有人知道我在做什么错吗?

如果我尝试按建议清除,则会收到此消息

Route cache cleared!

LogicException  : Unable to prepare route [api/user] for serialization. Uses Closure.



at C:\laragon\www\laraweb\vendor\laravel\framework\src\Illuminate\Routing\Route.php:880
    876|      */
    877|     public function prepareForSerialization()
    878|     {
    879|         if ($this->action['uses'] instanceof Closure) {
  > 880|             throw new LogicException("Unable to prepare route [{$this->uri}] for serialization. Uses Closure.");
    881|         }
    882|
    883|         $this->compileRoute();
    884|

  Exception trace:

  1   Illuminate\Routing\Route::prepareForSerialization()
      C:\laragon\www\laraweb\vendor\laravel\framework\src\Illuminate\Foundation\Console\RouteCacheCommand.php:62

  2   Illuminate\Foundation\Console\RouteCacheCommand::handle()
      C:\laragon\www\laraweb\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php:29

  Please use the argument -v to see more details.

最诚挚的问候。

2 个答案:

答案 0 :(得分:0)

由于您的代码没有问题,因此只需运行以下命令:

php artisan cache:clear php artisan route:cache php artisan config:cache

答案 1 :(得分:-1)

这是在Firefox中呈现html表单部分的方式。我认为代码还可以,不是吗?

<form style="display:inline" action="http://laraweb.test/mensajes/9 " method="post">
          <input name="_token" value="R88rPYL6WJgEDwQizUiJnzMWwptSWyJmgakGrdZC" type="hidden">
          <input name="_method" value="DELETE" type="hidden">
          <button type="submit" class="btn btn-danger" name="button">Eliminar</button>
        </form>

这是当我按“删除”按钮时,firefox中“网络”选项卡的屏幕截图。它似乎发出了获取请求...我不理解,因为我指定了POST方法... enter image description here