我想知道为什么在这种情况下我有一个“不允许”的方法。当我删除一个我复制的条目时,我正在尝试将值设置为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方法不允许
如何让它发挥作用?谢谢!
答案 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}'
。