2016-11-29 87 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