Cakephp 3 Callback method not reached

心不动则不痛 提交于 2019-12-31 04:00:11

问题


I have a problem with the afterDelete callback method. I can't use them.

Inside one of my "Storages" plugin controllers I want to delete a record and after that I want to do some other thinks, but the callback method is not reached. I have checked this with adding a log message inside the afterDelete() callback method.

This is the controller where I removed a record:

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);
   }
}

This is the (model) table where the afterDelete callback is defined:

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

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

Update:

When I debugged Log::debug($this->StoragecontainerBlockElements); inside the ajaxDeleteBlockElement function I got the following array inside debug.log file:

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

Update:

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');
    }
}

回答1:


As can be seen in the debugging results, $this->StoragecontainerBlockElements is not what you thought it is, it is a so called "auto-table" or "generic table", that is, an instance of \Cake\ORM\Table instead of a concrete subclass thereof.

Your StoragecontainerBlockElementsTable class/file cannot be found/loaded for some reason, hence the fallback to \Cake\ORM\Table. Might be caused by

  • a typo in the filename, classname, or the namespace
  • or the namespace is missing completely (it's not in your question)
  • or the class lives in a plugin, and you didn't used plugin notation for loading it
  • or the file permissions do not allow reading file
  • or the file is missing (not deployed)
  • ...

See also

  • Cookbook > Configuration > Disabling Generic Tables



回答2:


Try

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

class StoragecontainerBlockElementsTable extends Table {

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

    }
}

Details Here



来源:https://stackoverflow.com/questions/43097349/cakephp-3-callback-method-not-reached

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!