我创建了一个视图,在一个视图中显示实体本身及其链接实体(与额外连接数据的多对多关系)。
到目前为止一切顺利。现在我希望每个链接的实体都有一个删除链接/按钮。这将导致连接表中的连接数据被删除。
报价有物品。所以连接表是ItemsQuotes。我在报价控制器中添加了一个方法deleteitem,并在报价的编辑视图中修改了表单链接以指向此方法。
现在我得到一个例外,即无法找到记录。我已经传递了连接行的ID,并且我正在使用TableRegistry来调用ItemsQuotes上的get($ id)。
我也尝试了其他一些东西(我的第一个想法就是立即将删除链接发送到ItemsQuotes控制器,但这似乎不起作用(需要阻止视图?)。那么&#39做交叉控制器的正确方法是什么?我在这里做错了什么?
提前致谢。
答案 0 :(得分:0)
所以我找到了答案并愿意分享,因为它可能对其他人有所帮助。
这里的关键是你必须加载一个额外的模型,否则你会得到一个错误,你在布尔上使用了get()。
代码:
$这 - > loadModel(' ItemsQuotes&#39);
在此之后,您可以使用控制器中删除的一般方法:
代码(您实际应该检查删除操作是否有效并采取相应措施:))
public function deleteItem($ id = null) { $ this-> request-> allowMethod([' post',' deleteitem']); $这 - > loadModel(' ItemsQuotes&#39); $ entity = $ this-> ItemsQuotes-> get($ id); $ result = $ this-> ItemsQuotes-> delete($ entity); 返回$ this->重定向([' action' =>' index']); }
使用表格postLink
代码(这不适用于表单创建和结束之间的所有postLinks - > 见下文):
echo $ this-> Form-> postLink(__(' Delete Item'),[' action' =>' deleteitem',$ item [' _joinData'] [' id']],['确认' => __('您确定要删除该项目吗?从您的报价#{0}?',$ item [' _joinData'] [' id'])]);
起初这似乎有效,但它只适用于最后一个项目(因为表格已经在那里结束)。
文档提到了上面的错误:
如果要在现有表单中使用此方法,则必须使用此方法 使用块选项,以便将新表单设置为视图块 可以在主表单之外呈现。
这本食谱对此非常模糊,但这个问题很好地说明了如何在Cakephp2和cakephp3中做到这一点: How to use FormHelper::postLink() inside of a form?
echo $this->Form->postLink(
'Delete',
[
'action' => 'delete',
$attendanceid
],
[
'block' => true, // disable inline form creation
'class' => 'btn btn-dark btn-sm col-md-4',
'confirm' => __('Are you sure you want to delete')
]
);
干杯