Laravel中不允许使用的方法。为什么在这种情况下?

时间:2017-11-28 14:51:53

标签: php laravel laravel-5

我想知道为什么在这种情况下我有一个“不允许”的方法。当我删除一个我复制的条目时,我正在尝试将值设置为NULL(我有一个hasClone列)。

我的控制器:

public function destroyChanges($id)
  {
    $activity = Activity::findOrFail($id);
    $activity->delete();

    return redirect()->to('/admin/activity/setCloneNull/' . $activity->parent_id);
  }

public function setCloneNull($id, Activity $activity)
{
  $activity = $activity->where('id', '=', $id)->first();
  $activity->hasClone = NULL;
  $activity->save();
  return redirect(url('/admin/activity/'));
}

路线:

  Route::delete('activity/destroyChanges/{id}', ['as' => 'cancel.activity', 'uses' => 'ActivityCrudController@destroyChanges']);
  Route::post('activity/setCloneNull/{id}', ['as' => 'setCloneNull.activity', 'uses' => 'ActivityCrudController@setCloneNull']);

编辑:当我尝试运行'setCloneNull'方法时,我收到错误。错误是405方法不允许

如何让它发挥作用?谢谢!

5 个答案:

答案 0 :(得分:1)

您正在调用$activity->delete()方法,从而删除$activity模型及其所有属性;由于您正试图获取不再存在的某些内容的$activity->parent_id属性,因此您会收到错误。

更新:请参阅@ Jite的答案,但请考虑更改代码逻辑

答案 1 :(得分:1)

您的destroyChanges操作正在使用http方法delete。当你从它重定向时,你保留另一条路线不接受的http方法(因为它是post)。
即:您不允许使用该方法,因为您无法向delete提出/admin/activity/setCloneNull/请求

答案 2 :(得分:0)

.someSelector { font-family: 'Exo 2', sans-serif; } 之后只需return redirect(url('/admin/activity/'));

$activity->delete();中的任何内容都无法对已删除的活动产生影响

另外setCloneNull

您正在传递ID和活动对象?这看起来不太好。您可以使用setCloneNull($id, Activity $activity)代替find($id)

答案 3 :(得分:0)

问题是您为setCloneNull()添加了 POST 路由,但重定向会执行 GET 请求。

答案 4 :(得分:0)

您可以使用Larvavels依赖注入。只需在参数列表中键入模型,Laravel就会通过其ID来为您提供正确的模型。

从数据库中获取父活动,将hasClone设置为NULL,然后存储并删除活动。

public function destroyChanges(Activity $activity)
{
    $parentActivity = Activity::findOrFail($activity->parent_id);
    $parentActivity->hasClone = NULL;
    $parentActivity->save();

    $activity->delete();

    return redirect(url('/admin/activity/'));
}

删除Route::post('activity/setCloneNull/{id}'

的发布路线