2016-11-29 119 views
0

我创建了一个视图,该视图在一个视图中显示实体本身及其链接实体(与额外连接数据的多对多关系) 。Cakephp3链接/按钮,从不同的表中删除实体(连接数据)

到目前为止这么好。现在我想让每个链接的实体都有一个删除链接/按钮。这会导致连接表中的连接数据被删除。

行情有物品。所以连接表就是ItemsQuotes。我向Quotes控制器添加了一个deleteitem方法,并在Quotes的编辑视图中修改了表单链接以指向此方法。

现在我得到一个例外,记录找不到。我传递了连接行的id,并使用TableRegistry在ItemsQuotes上调用get($ id)。我的第一个想法是立即发送删除链接到ItemsQuotes控制器,但这似乎并不工作(需要块视图?)。那么,什么是正确的方式跨控制器的东西呢,我在做什么错在这里?

在此先感谢。

回答

0

所以,我找到了答案,并希望分享它,因为它可能会帮助别人。

这里的关键是你必须加载一个额外的模型,否则你会得到一个错误,你在一个布尔值上使用get()。

在此之后,你可以用一般的方法在控制器删除:

  • 文档:http://book.cakephp.org/3.0/en/orm/deleting-data.html
  • 代码(你实际上应该检查是否删除操作工作,并采取相应的行动:) )

    public function deleteItem($ id = null) { $ this-> request-> allowMethod(['post','deleteitem']); $ this-> loadModel('ItemsQuotes'); $ entity = $ this-> ItemsQuotes-> get($ id); $ result = $ this-> ItemsQuotes-> delete($ entity); return $ this-> redirect(['action'=>'index']); }

而使用的一种形式postLink

起初这似乎工作,但它只适用于最后一个项目(因为表格已经在那里结束)。

说明文档中提到我的上述错误:

如果要使用现有的形式在此方法中,你必须 使用块选项,这样新的形式被设置为一个视图块 可以在主表单之外进行渲染。

的食谱是在这个很模糊,但是这太问题显示好听如何做到这一点的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') 
    ] 
); 

干杯

+0

不知道为什么的样式没有申请代码,而我使用代码行前面的4个空格。 – th3penguinwhisperer