2017-03-29 53 views
1

我遇到了afterDelete回調方法的問題。我無法使用它們。Cakephp 3未達到回調方法

我的一個「Storages」插件控制器中我想刪除一條記錄,之後我想做一些其他的想法,但回調方法沒有達到。我已經在afterDelete()回調方法中添加了一條日誌消息來檢查。

這是我刪除一條記錄,所述控制器:

namespace Storages\Controller; 

class StoragecontainerBlocksController extends AppController { 

    public function initialize() { 
     parent::initialize(); 
     $this->loadComponent('RequestHandler'); 
    } 

    public function ajaxDeleteBlockElement() { 
     $this->autoRender = false; 

     // load model 
     $this->loadModel("StoragecontainerBlockElements"); 

     // get element id 
     $elementId = $this->request->data('id'); 

     $this->request->allowMethod(['post', 'delete']); 

     // delete element 
     $storagecontainerBlockElement = $this->StoragecontainerBlockElements->get($elementId); 
     $this->StoragecontainerBlockElements->delete($storagecontainerBlockElement); 
    } 
} 

這就是afterDelete回調定義(模型)表:

use Cake\Log\Log; 
    class StoragecontainerBlockElementsTable extends Table { 

    public function afterDelete(Event $event) { 
     Log::debug('Got here'); 
    } 
    } 

更新:

當我在ajaxDeleteBlockElement函數內部調試Log::debug($this->StoragecontainerBlockElements);時,我在debug.log文件中得到了以下數組:

2017-03-31 07:03:48 Debug: Cake\ORM\Table Object 
(
    [registryAlias] => StoragecontainerBlockElements 
    [table] => storagecontainer_block_elements 
    [alias] => StoragecontainerBlockElements 
    [entityClass] => \Cake\ORM\Entity 
    [associations] => Array 
     (
     ) 

    [behaviors] => Array 
     (
     ) 

    [defaultConnection] => default 
    [connectionName] => default 

更新:

namespace Storages\Model\Table; 

use Cake\ORM\RulesChecker; 
use Cake\ORM\Table; 
use Cake\Validation\Validator; 
use Cake\Log\Log; 

class StoragecontainerBlockElementsTable extends Table { 

    public function initialize(array $config) { 
     parent::initialize($config); 
    } 

    public function afterDelete(Event $event) { 
     Log::debug('Got here'); 
    } 
} 
+0

'$這個 - > StoragecontainerBlockElements'可能不是你認爲它是...調試屬性,以確保它不是一個自動錶(一個'\ Cake \ ORM \ Table'的實例)。 – ndm

+0

我用調試結果更新了我的問題。 – CodeWhisperer

回答

1

可以看出在調試結果,$this->StoragecontainerBlockElements是不是你認爲它是,它是所謂的「自動錶」或「通用ta」 ble「,即\Cake\ORM\Table的一個實例,而不是其具體的子類。

StoragecontainerBlockElementsTable您的StoragecontainerBlockElementsTable類/文件由於某種原因無法找到/加載,因此回退到\Cake\ORM\Table。可以通過

  • 在文件名,類名一個錯字,或命名引起
  • 或命名空間是完全丟失(這不是你的問題)
  • 或類生活在一個插件,你不使用插件標記加載它
  • 或文件權限不允許讀文件
  • 或文件丟失(未部署的)
  • ...

又見

+0

我已經添加了我的StoragecontainerBlockElementsTable類。這是一個名爲「Storages」的插件。 – CodeWhisperer

+0

@CodeWhisperer所以這是至少點3. – ndm

+0

Wikked!我不得不使用類名稱來包含插件名稱,用'$ this-> loadModel(「Storages.StoragecontainerBlockElements」);'感謝您的幫助。你贏得了我的賞金! – CodeWhisperer

0

嘗試

use Cake\Log\Log; 
use Cake\ORM\Table; 

class StoragecontainerBlockElementsTable extends Table { 

    public function afterDelete($event, $entity, $options){ 
     Log::debug('Got here'); 

    } 
} 

詳細Here

+0

這不能解決我的問題。 「Got here」消息不在我的debug.log文件中。你有其他想法來解決我的問題嗎? – CodeWhisperer

+0

我有更新代碼,請檢查'afterDelete()'是否被加入'debug()'和die()' – tarikul05

+0

當我調試delete()函數時,我得到一個「true」。但是,當我使用ajax調用ajaxDeleteBlockElement()函數時,如何調試afterDelete()?在afterDelete()方法中使用die()或debug()時沒有任何事情發生。 – CodeWhisperer