Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException,删除按钮

Posted

技术标签:

【中文标题】Symfony\\Component\\HttpKernel\\Exception\\MethodNotAllowedHttpException,删除按钮【英文标题】:Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException, delete buttonSymfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException,删除按钮 【发布时间】:2015-01-07 07:25:19 【问题描述】:

我有一个罕见的问题,我正在使用 Laravel 4php,我在 jQuery datatable 中有一个 "Delete" 按钮,我正在删除注册表,当我按下按钮时(在除第一个数据之外的任何其他数据中)调用tipos.destoy 方法并且工作正常!但是当我按下第一个 Delete 按钮时,它会抛出异常:

Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException.

路线:

Route::resource('tipos', 'TiposController');

控制器:

public function destroy($id)
    
        $this->tipo->find($id)->delete();
        return Redirect::route('tipos.index');
    

型号:

protected $guarded = array();

protected $table = 'tipos';

protected $fillable = array('clave_tipo', 'nombre_tipo', 'created_by', 'updated_by');

public static $rules = array(
    'clave_tipo' => 'required',
    'nombre_tipo' => 'required',
    'created_by' => 'required',
    'updated_by' => 'required'
);

查看:

@foreach($tipos as $tipo)
    <tr>
        <td> $tipo->clave_tipo </td>
        <td> $tipo->nombre_tipo </td>
        <td> link_to_route('tipos.edit', 'EDITAR', array($tipo->id), array('class' => 'btn btn-success')) </td>
        <td>
             Form::open(array('method' => 'DELETE', 'route' => array('tipos.destroy', $tipo->id))) 
             Form::submit('Delete', array('class' => 'btn btn-danger')) 
             Form::close() 
        </td>
    </tr>
@endforeach

我不知道为什么它对所有其他按钮都能正常工作,但只有 第一个 按钮会引发异常。 任何帮助将不胜感激。

【问题讨论】:

当您在 Form::open() 中指定路由时,您不必设置 http 方法。 对不起,我不明白,请你说的更具体些。 只是为了澄清您的问题,您的具体问题是当您单击上方表单中的 btn-danger 元素时,Laravel 会抛出 MethodNotAllowed 异常? 是的,只有在 btn btn-danger 中,我有一个数据表,所以我有很多删除按钮,但只有当我按下第一个(删除)按钮时,才会抛出异常,当我按下任何其他删除按钮(第一个除外)都可以正常工作,并且数据表会删除寄存器。 我看不出您的表单有任何明显错误,但我会提到,如果您 1) 检查表单的渲染 html 输出以确保它与您的匹配,它可能会帮助您调试它会期望,并且 2) 验证 URL after 单击删除按钮之一是否符合您的预期。其中一个很可能以某种方式关闭 【参考方案1】:

我解决了问题,我只是添加另一个表单:

<td>
    <form method="POST" action="http://localhost/posm/public/tipos/" accept-charset="UTF-8"><input name="_method" type="hidden" value="DELETE"><input name="_token" type="hidden" value="zrWDtdGVRnzreYGnZizSHqeIo7jPQlXBlGP03iJW">
    </form>
     Form::open(array('method' => 'DELETE', 'route' => array('tipos.destroy', $tipo->id))) 
     Form::submit('Delete', array('class' => 'btn btn-danger')) 
     Form::close() 
</td>

我不清楚为什么我必须这样做,我认为是 laravel 的错误或其他什么,但它有效,谢谢!

【讨论】:

以上是关于Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException,删除按钮的主要内容,如果未能解决你的问题,请参考以下文章