【问题标题】:RESTful Laravel controller not picking up Destroy() methodRESTful Laravel 控制器没有选择 Destroy() 方法
【发布时间】:2014-04-14 20:11:59
【问题描述】:
Structure: views/agents/alert/index.blade.php

删除“通知”的表格:

{{ Form::open(
    array('url'=>'agents/alert/delete/'. $alerts->id, 'role'=>'form')) }}
{{ Form::hidden('_method', 'DELETE') }}
    <button type="submit" class="btn btn-warning" id="archive">Archive</button>
{{ Form::close() }}

代理控制器:

public function destroy($id)
    {
        $alert = Alert::find($id);
        $alert->delete();

        return Redirect::to('/agents/')
        ->with('message-success', 'Your alert was successfully archived.');
    }

Routes.php: /* 代理的路线 */

Route::get('agents/alert/{id}', 'AgentsController@Show');
Route::get('agents/alert/delete/{id}', 'AgentsController@Destroy');
Route::controller('agents', 'AgentsController');

我正确引用了用户按下删除时调用的 URL,但是出现的错误是“找不到控制器方法”。

任何帮助我都会感激不尽。

【问题讨论】:

  • 试试AgentsController@destroy(提示:区分大小写)。另外,作为说明,我会避免使用没有任何身份验证的GET 请求来删除对象。我可以很容易地编写一个程序来删除你所有的警报:)
  • 嗨,Sam,它仍然返回相同的错误。上面@show 的路线,无论有无大写都适用。哈,你读懂了我的想法,我也打算这样做,只是不知道怎么做!
  • 嗯,尝试删除 Route::controller() 行。如果您手动定义所有路由,则不需要使用 Laravel 的 RESTful 控制器方法(这会自动将 GET agents/test 之类的请求路由到 AgentsController@GetTest)。
  • 解决您的其他问题:尝试使表单 POST,然后确保发送 _method:DELETE 参数。这将是一个很好的初始保护层。
  • 嗨 Sam,如果我删除 Route::controller() 行,我将无法访问我的 /agents/ getIndex(),视图。

标签: php laravel destroy


【解决方案1】:

您应该对资源执行 DELETE。

如果您有一个带有唯一 URL agents/alert/{id} 的警报,您应该对同一 URL 执行 DELETE 方法。

Route::delete('agents/alert/{id}', 'AgentsController@Destroy');

创建一个可以提交删除资源的表单:

{{ Form::open(array('method' => 'DELETE', 'action' => array('AgentsController@Destroy', $alert->id))) }}

更多关于 RESTful 控制器的信息here

同时尝试使用named routes 而不是action

【讨论】:

  • 谢谢@hannesvdvreken,它运行良好。我欠你一个。
猜你喜欢
  • 1970-01-01
  • 2016-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-24
  • 2013-10-12
  • 1970-01-01
  • 2012-11-30
相关资源
最近更新 更多